一、概述。

java对数据的操作是通过流的方式。
java用于操作流的对象都在IO包中。
流按照操作数据不同分为两种,字节流和字符流。
流按照流向分为输入流,输出流。

输入输出的“入”和“出”是相当于内存来说的。

字符流:字节流读取文字字节数据后,不直接操作,而是先查指定的编码表,获取对应的文字,再对这个文字进行操作。简单来说就是字节流+码表

在IO流中,字节流的顶层父类是Writer和Reader。

二、java.io.FileWriter类。

public class FileWriterextends OutputStreamWriter

 

 

Writer

  |--OutputStreamWriter

    |--FileWriter

该类是操作字符文件的流,用于将数据写入到文件中。

1.方法摘要

(1).构造方法。

有两个重要的构造方法:

FileWriter(File file)
          根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(File file, boolean append)
          根据给定的 File 对象构造一个 FileWriter 对象。

后者相对于前者来说多了一个boolean型的参数,该参数的作用是决定写入文件的方式是追加方式还是覆写方式。

默认的构造方法(前者)构造的FileWriter流对象向文件中写入的时候会默认的将文件的内容清空然后再写入,如果使用后者并将true传入该构造方法,则写入的方式就变成了追加方式。

(2).write方法。

该类没有自己的write方法,全部从父类或者超类中继承而来的write方法。

从OutputStreamWriter中继承而来的方法:

void write(char[] cbuf, int off, int len)
          写入字符数组的某一部分。
 void write(int c)
          写入单个字符。
 void write(String str, int off, int len)
          写入字符串的某一部分。

从Writer中继承而来的write方法:

 void write(char[] cbuf)
          写入字符数组。
 void write(String str)
          写入字符串。

(3).flush方法。

void flush()
          刷新该流的缓冲。

该方法是从OutputStreamWriter中继承而来的,作用是将流中的数据数据刷到文件中。文件关闭前会默认调用此方法。如果不调用此方法,则当缓冲区满了也会自动调用该方法。

(4).close方法。

 void close()
          关闭此流,但要先刷新它。

2.flush与close比较

使用flush方法和close方法均可以保存文件,使用这两者各有什么好处?

举一个形象的例子我们在使用记事本软件的时候,会常常使用“保存”按钮保存住当前内容到文件,如果没有保存,关闭文件的时候就会出现提示信息“是否要保存文件内容?”,然后再关闭文件。在这个例子中,“保存”相当于flush的功能,而关闭文件则相当于close的功能,经常点保存按钮的目的就是为了防止断电丢失和节约内存。

因此,使用flush的目的就是为了防止断电丢失和节约内存,因此在写程序的时候,尽量写入一句刷新一句;如果文件不关闭,最明显的影响就是“删不掉文件”。

3.FileWriter细节:换行和续写

在Windows字符文件中,文件的换行符是\r\n,在linux中则为\n,这样很有可能导致同一个java程序在linux中的运行结果和在windows中的运行结果不一致。解决方法是使用System类中的方法getProperty,得到当前系统中的行分隔符。具体用法:String line_sparator=System.getProperty("line.separator");

如果想要在已存在的文件末尾添加新内容,则需要使用第二种构造方法。

4.异常处理标准模板。

 1 package p02.FileWriterDemo.p01.ExceptionCaptureDemo;
 2 
 3 import java.io.FileReader;
 4 import java.io.FileWriter;
 5 import java.io.IOException;
 6 
 7 public class ExceptionHandleDemo {
 8 
 9     public static void main(String[] args) {
10         standarExceptionHandleDemo();
11     }
12 
13     private static void standarExceptionHandleDemo() {
14         FileWriter fw=null;
15         FileReader fr=null;
16         try
17         {
18             fr=new FileReader("c:\\source.txt");//可能会抛出FileNotFindException
19             fw=new FileWriter("c:\\aim.txt");//可能会抛出IOException
20             char buf[]=new char[1024];
21             int length=fr.read(buf);
22             fw.write(buf,0,length);
23             fw.flush();
24         }
25         catch(IOException e)
26         {
27             System.out.println("读写失败!");
28         }
29         finally
30         {
31             if(fr!=null)
32             {
33                 try
34                 {
35                     fr.close();
36                 } catch (IOException e)
37                 {
38                     //异常处理程序
39                 }
40             }
41             if(fw!=null)
42             {
43                 try
44                 {
45                     fw.close();
46                 } catch (IOException e)
47                 {
48                     //异常处理程序
49                 }
50             }
51         }
52     }
53 
54 }
View Code

相关文章: