1、IO流的概念
-
IO的意思就是Input和Output;
-
IO流是用来处理设备之间的数据传输;
-
操作流对象都在Java的IO包中;
-
按照处理数据的不同可以分为两种流:(1)字节流,(2)字符流
-
IO流有四个基类:字节流:InputStream、OutPutStream,字符流:Reader、Writer,从这四个基类衍生的子类的名字都是由使用功能加某个基类的名字为后缀,而命名的。
2、文件的创建(FileWriter)
-
FileWriter的直接已知子类有:BufferedWriter、CharArrayWriter、FilterWriter、OutputStreamWriter、PipedWriter、PrintWriter、StringWriter。
-
用FileWriter创建一个文本文件的一般步骤是:
1)创建一个FileWriter对象,即创建一个文本文件,初始化动作是为了明确一个可被操作的文件,如果该目录下存在同名文件,则该文件将被覆盖;
2)调用writer()方法来定义需要写入的数据;(其实writer()方法并没有将数据写入文件,而是将数据存到流中)
3)调用flush() 或close() 方法刷新流对象中的数据,将流对象中的数据写入到目标文件中。(flush()方法和close()方法的区别在于,flush()方法只是起到刷新作用,流其实还存在,而close() 方法是在关闭流之前会刷新一次流对象内部的缓冲中的数据,并关闭流)
代码示例:
import java.util.io.*;
class FileWriterDemo{
public static void main(String args[]) throws IOException{
FileWriter fw=new FileWriter("demo.txt");//
fw.writer("Hello");
fw.close();
}
}
3. IO的异常处理方式
用FileWriter创建对象,写入数据,关闭流的时候都会抛出异常,所以要对这三步进行抛出异常处理,具体的代码处理方式如下:
import java.util.io.*; class FileWriterDemo2{ public static void main(String args[]) { FileWriter fw=null;//把创建空FileWriter对象的语句放到外边,就可以避免单独对其进行抛异常处理 try { fw=new FileWriter("Demo.txt"); fw.writer("Hello"); } catch(IOException e)//抛出IOException的异常 { System.out.println(e.toString()); } finally//不管前两步是否抛出异常,流对象在程序结束的时候必须关闭,所以要把close()放在finally语句当中 { try { if(fw!=null) fw.close(); } catch(IOException e){System.out.println(e.toString());} } } }
4.文件的续写
使用FileWriter的构造方法:FileWriter(String fileName,boolean append),FileWriter(文件名,布尔值),布尔值为true的时候,将数据写入文件的末尾处。
代码示例:
import java.util.io.*;
class FileWriterDemo2{
public static void main(String args[]) throws IOException{
FileWriter fw=new FileWriter("Demo.txt",true);/*传递一个true参数,代表不覆盖原有文件,并在已有文件的末尾处进行数据续写*/
fw.writer("abcdef");
fw.close();
}
}
5、文件的读取
1)用read()方法,一次只能读一个字符,并且会依次递增,读到文件的末尾超出后,会返回 -1
代码示例:
import java.util.io.*;
class FileWriterDemo2{
public static void main(String args[]) throws IOException{
FileReader fr=new FileRriter("Demo.txt");/*创建一个文件读取流对象和指名称的文件相关联,要保证文件已经存在的,否则会发生异常。*/
int ch=0;
while((ch=fr.read())!=-1){ /*调用读取流对象的read()方法,read方法一次只能读一个字符,而且可以一直往下读,当超过文件长度后,返回-1 */
System.out.println((char)ch);/*read方法返回的是int类型的数据,要把它转换成字符型数据。*/
}
fr.close();
}
}
2) 用read(char[])方法,将数据读到数组里面去,返回的是读取的字符串的个数。
示例代码:
import java.util.io.*;
class FileWriterDemo2{
public static void main(String args[]) throws IOException{
FileReader fr=new FileRriter("Demo.txt");
char[] buf=new char[1024];/*数组长度定义成1024的整数倍*/
int num=0;
while((num=fr.read(buf))!=1)
{
System.out.println(new String(buf,0,num));/*从字符串数组的第一个开始打印,打印到第num个字符*/
}
fr.close();
}
}