java中文件的I/O操作
java中文件的读写操作
(一)
(1)java中文件的字节转成字符读操作
1
2
3
4
5
|
FileInputStream fStream = new FileInputStream( "test.txt" ); //此时为字节流<br> byte [] b = new byte [ 31 ]; //定义字节数组存储从文件夹中读取的数据,大小最多31字节 <br> fStream.read(b); //将test.txt的数据读到b中 <br> String line = new String(b, "UTF-8" ); //将字节转换成字符 <br> System.out.println(line); //打印输出 |
以上是简单的字节转字符输出的例子,当数据量较大时,应该重复读取
1
2
3
4
5
|
while (fStream.read(b)!=- 1 ) <br>{ <br> String line= new String(b, "UTF-8" ); <br> System.out.println(line); <br>} |
(2
)java中文件的字符转为字节写操作
1
2
3
4
|
FileOutputStream fos = new FileOutputStream( "test.txt" ); <br>String line= "hello world" ; <br> byte b[]=line.getBytes(); //将字符转换成字节 <br>fos.write(b);通过字节流写入文件<br><br>fos.close(); //关闭 |
(二)
利用缓冲区来进行文件的写入和写出,都是以缓冲区为中介,java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。
(1)利用缓冲区向文件写入数据
1
2
3
4
5
6
7
|
String line= "hello" ; <br>FileOutputStream fos = new FileOutputStream( "test.txt" ); <br>BufferedWriter bfr = new BufferedWriter( new OutputStreamWriter(fos)); // <br>bfr.write(line); //向缓冲区写入数据 <br>bfr.flush(); //清理缓冲区,将数据全部传入文件 <br>bfr.close(); //关闭缓冲区 <br>fos.close(); //关闭文件输出流 |
为什么用到flush(),因为缓冲区对于小数据,可能要等到存满一定量的数据才会向文件写入,造成一定的数据滞留,利用flush可以将滞留的数据一起输送给文件,防止文件数据的丢失。
(2)利用缓冲区从文件中读取数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
FileInputStream fis = new FileInputStream( "test.txt" ); BufferedReader bfr = new BufferedReader( new InputStreamReader(fis)); String line= null ; while ((line=bfr.readLine())!= null ) //从读缓冲区一行一行的读取数据 { System.out.println(line); } bfr.flush(); //清空缓冲区<br> bfr.close(); //关闭缓冲区 fis.close(); //关闭文件输入流 |
bfr.readline()是通过从缓冲区以行为单位读取数据,BufferReader是通过将字节转换成字符类。
另外关于文件的写入不覆盖新的数据,方法
FileOutputStream os = new FileOutputStream("test.txt", true);//true表示每次添加到文件末尾,从而不删除原有数据
(三)关于FileReader和FileWriter
(1)FileReader
FileReader类创建了一个可以读取文件内容的Reader类。比较适用于纯文本文件
例如,从一个文件逐行读取并把它输出到标准输入流。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import java.io.*; class FileReaderDemo { public static void main (String args[ ] ) throws Exception { BufferedReader br = new BufferedReader (fr); String s; while ((s = br.readLine() )!= null ) { System.out.prinln (s); } fr.close(); } } |
(2)FileWriter
FileWriter 创建一个可以写文件的Writer类。构造函数:
FileWriter (String filePath) filePath 是一个文件的完整路径
FileWriter(String filePath, boolean append) 如果append为true ,输出是附加到文件尾的,即不覆盖原数据
FileWriter(File fileObj) 是描述该文件的File对象
1
2
3
4
5
6
7
|
FileWriter fr = new FileWriter( "test.txt" ); BufferedWriter bfw = new BufferedWriter(fr); String linString= "hello World" ; bfw.write(linString); bfw.flush(); bfw.close(); fr.close(); |