版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuewen2008/article/details/81909022
文件流—基本概念
文件在程序中是以流的形式来操作的.
流:数据在数据源(文件)和程序(内存)之间经历的路径
输入流:数据从数据源(文件)到程序(内存)的路径.
输出流: 数据从程序(内存)到数据源(文件)的路径.
Java IO类图
文件流分类:字节流和字符流.
字节流:可以用于读写二进制文件以及任何类型的文件
字符流:可以用于读写文本文件,不能操作二进制文件
示例代码
1、File类的基本用法
/*
* 演示File类的基本用法
* */
package com.fox.test3;
import java.io.*;
public class Demo11_3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:\\aa.txt");
//得到文件的路径
String path =file.getAbsolutePath();
System.out.println("文件大小:"+file.length());//文件长度
System.out.println("AbsolutePath是:"+path);//文件绝对路径
System.out.println("Path是:"+file.getPath());
System.out.println("文件是否可读:"+file.canRead());//文件谁否可读
System.out.println("是否路径:"+file.isDirectory());
//创建文件,创建文件夹
File f = new File("D:\\ff\\bb.txt");//
if(!f.exists())
{
//文件不存在,创建文件
try {
f.createNewFile();//不能创建包含不存在的文件夹的文件
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else
{
System.out.println("文件已经存在");
}
File f2 = new File("D:\\ff");
System.out.println("文件夹是否存在:"+f2.isDirectory());
if(f2.isDirectory())//这个方法并不是判断是否是目录,而是判断该目录是否已经存在
{
System.out.println("文件夹已经存在");
}else {
f2.mkdir();//文件夹不存在,创建文件夹
}
//列出某个文件夹下的所有文件
File f3 = new File("D:\\xx");
if(f3.isDirectory())
{
File listfiles[] =f3.listFiles();
for(int i=0;i<listfiles.length;i++)
System.out.println("文件名是:"+listfiles[i].getName());
}
}
}
2、FileInputStream类从文件中读取内容到控制台显示
/**
*
*演示读写文件内容 FileInputStream类的用法
*/
package com.fox.test4;
import java.io.*;
public class Demo11_4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
File f = new File("D:\\aa.txt");
FileInputStream fis= null;
//File没有文件的读写能力,没有读写方法,需要使用FileInputStream
try {
fis = new FileInputStream(f);
//定义一个字节数组,存放从文件中读到的内容,相当于缓存
byte []bytes = new byte[1024];
int n=0;//实际读取到的字节数
while((n=fis.read(bytes))!=-1)//read方法返回实际读入缓冲区的字节数,如果因为已经到达文件末尾而没有更多的数据则返回-1
{
//把字节转换为String
String s = new String(bytes,0,n);
System.out.println(s);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//关闭文件流,一定要记得关闭文件流
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3、FileOutputStream类:写数据到文件中去
/*
* 通过FileOutputStream类写内容到文件中
*
* */
package com.fox.test5;
import java.io.*;
public class Demo11_5 {
public static void main(String[] args) {
FileOutputStream fos =null;
File f = new File("D:\\bb.txt");
String test ="hha 我是java 欢迎来到我的世界!\r\n";
String test1 ="hha 我要学java,做一个java攻城师!";
try {
fos = new FileOutputStream(f);
fos.write(test.getBytes());
fos.write(test1.getBytes());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4、图片拷贝
/*
* 演示:图片拷贝
*
* */
package com.fox.test6;
import java.io.*;
public class Demo11_6 {
public static void main(String[] args) {
// TODO Auto-generated method stub
FileInputStream fis= null;
FileOutputStream fos= null;
int n =0;//实际读到的字节数
try {
fis= new FileInputStream("c:\\1.jpg");
fos = new FileOutputStream("d:\\2.jpg");
byte buf[]= new byte[1024];
while((n=fis.read(buf))!=-1)
{
fos.write(buf);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
fis.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("图片拷贝完成");
}
}
}
5、字符流操作:拷贝txt文件
/*
* 演示文件字符流操作
*
* 拷贝一个txt文件到其他地方
* */
package com.fox.test7;
import java.io.*;
public class Demo11_7 {
public static void main(String[] args) {
FileReader fr =null;
FileWriter fw =null;
char buf[]= new char[1024];
int n=0;
try {
fr = new FileReader("c:\\test.txt");
fw = new FileWriter("d:\\test_copy.txt");
while((n=fr.read(buf))!=-1) {
String string = new String(buf,0,n);//不加这一句会有乱码出现
fw.write(string);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
fr.close();
fw.close();
System.out.println("文件拷贝完成");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
6、缓冲字符流
为了提高效率而引入了缓冲字符流,它可以一行一行的读取文件的内容.
BufferedReader和BuferedWriter的使用。
/*
* 使用BufferedReader 和BufferedWriter演示文本文件的拷贝功能
* */
package com.fox.test8;
import java.io.*;
public class Demo11_8 {
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader br =null;
BufferedWriter bw =null;
//先创建一个FileReader对象和FileWriter对象
FileReader fr= null;
FileWriter fw=null;
try {
fr = new FileReader("c:\\test.txt");
fw= new FileWriter("d:\\test_copy.txt");
br = new BufferedReader(fr);
bw = new BufferedWriter(fw);
//读取文件
String s="";
while((s=br.readLine())!=null) {
System.out.println(s);
bw.write(s);
bw.write("\r\n");//需要自己添加换行符
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
br.close();
bw.close();
System.out.println("文件拷贝完成");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}