File类访问文件属性
File类常用方法
通过流来读写文件
流是指一连串流动的字符,是以先进先出方式发 送信息的通道
输入/输出流与数据源
Java流的分类
文本文件的读写
用FileInputStream和FileOutputStream读写文本文件
用BufferedReader和BufferedWriter读写文本文件
二进制文件的读写
使用DataInputStream和DataOutputStream读写二进制文件
FileInputStream
一次读取一个字节
一次读取多个字节
FileOutputStream写文件
1、前两种构造方法在向文件写数据时将覆盖文件中原有的内容
2、创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件
复制文件
FileReader读文件
//FileReader 使用字符数组方式读
public static void test20() {
//读文件
FileReader fr = null;
//创建文件字节输入流
try {
//创建文件字节输入流
fr = new FileReader("d:/myfile/abc88.txt");
//使用字节数组读取
char[] cs = new char[4];
//读取一个字节(当读取到结尾返回是-1)
//读取的内容保存在字节数组中(bs中)
int length = fr.read(cs);
StringBuffer sb = new StringBuffer();
//循环
while(length!=-1) {
System.out.print(new String(cs,0,length));
sb.append(cs, 0, length);
length = fr.read(cs);
}
System.out.println("*****************************");
System.out.println(sb);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
BufferedReader 读文件
//FileReader 使用字符数组方式读
public static void test20() {
//读文件
FileReader fr = null;
//创建文件字节输入流
try {
//创建文件字节输入流
fr = new FileReader("d:/myfile/abc88.txt");
//使用字节数组读取
char[] cs = new char[4];
//读取一个字节(当读取到结尾返回是-1)
//读取的内容保存在字节数组中(bs中)
int length = fr.read(cs);
StringBuffer sb = new StringBuffer();
//循环
while(length!=-1) {
System.out.print(new String(cs,0,length));
sb.append(cs, 0, length);
length = fr.read(cs);
}
System.out.println("*****************************");
System.out.println(sb);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
10.1.6 BufferedReader 读文件
public static void test21() {
//包装流 处理流 高级流(对底层流(节点流,直接和具体文件或者位置打交道)的包装,方便操作)
BufferedReader br = null;
FileReader fr = null;
try {
//节点流 底层流
fr = new FileReader("d:/myfile/abc88.txt");
//使用包装流进行包装
br=new BufferedReader(fr);
String content =null;
while((content = br.readLine())!=null) {
System.out.println(content);
}
// String content = br.readLine();
// while(content!=null) {
// System.out.println(content);
// content = br.readLine();
// }
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
//高级流关闭会自动关底层流
br.close();
//fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
BufferedWriter写文件
//BufferedWriter 带专门的缓冲区效率更高
public static void test23() {
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter("d:/myfile/a1.txt");
bw = new BufferedWriter(fw);
bw.write("hello 11111!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
使用BufferedReader和BufferedWriter复制文件
//使用BufferedReader和BufferedWriter复制文件
public static void test24() {
//包装流 处理流 高级流(对底层流(节点流,直接和具体文件或者位置打交道)的包装,方便操作)
BufferedReader br = null;
FileReader fr = null;
FileWriter fw = null;
BufferedWriter bw = null;
try {
//节点流 底层流
fr = new FileReader("d:/myfile/abc88.txt");
fw = new FileWriter("d:/myfile/a1.txt");
//使用包装流进行包装
br=new BufferedReader(fr);
bw = new BufferedWriter(fw);
String content =null;
while((content = br.readLine())!=null) {
System.out.println(content);
bw.write(content);
bw.newLine();
//清空缓冲区,把缓冲区的内容写入文件
bw.flush();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
//高级流关闭会自动关底层流
br.close();
//fr.close();
//close方法中会执行 flush()
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
转换流 同时设置编码 解决乱码问题
也可以使用工具直接修改文件编码
读写二进制文件
与字节流FileInputStream类实现文本文件读取步骤极其相似