1.1 IO(Input Output)流概述:
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中
流按操作数据分为两种:字节流与字符流。
流按流向分为:输入流,输出流。
将外设中的数据读取到内存中:输入。
将内存的数写入到外设中:输出。
1.2 IO中的字符流和字节流:
字节流两个基类:
InputStream OutputStream
字符流两个基类:
Reader Writer
P.S.
由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
如:InputStream的子类FileInputStream。
如:Reader的子类FileReader。
需求:在硬盘上,创建一个文件并写入一些文字数据(示例1)。
1 示例1: 2 import java.io.*; 3 class FileWriterDemo 4 { 5 public static void main(String[] args) throws IOException 6 { 7 //创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。 8 //而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。 9 //其实该步就是在明确数据要存放的目的地。 10 FileWriter fw = new FileWriter("demo.txt"); 11 12 //调用write方法,将字符串写入到流中。 13 fw.write("abcde"); 14 15 //刷新流对象中的缓冲中的数据。 16 //将数据刷到目的地中。 17 //fw.flush(); 18 19 20 //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。 21 //将数据刷到目的地中。 22 //和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。 23 fw.close(); 24 } 25 }
PS:1. close方法只能用一次。
2. 流关闭以后不能,不能再调用write方法,否则会报如下异常错误:
3.如果构造函数中加入true,可以实现对文件进行续写(示例2)
1 示例2: 2 import java.io.*; 3 class FileWriterDemo3 4 { 5 public static void main(String[] args) throws IOException 6 { 7 8 //传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。 9 FileWriter fw = new FileWriter("demo.txt",true);根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。为 true,则将数据写入文件末尾处,而不是写入文件开始处 10 11 fw.write("nihao\r\nxiexie");//\r\n表示换行 12 13 fw.close(); 14 } 15 }
1.3 IO异常的处理方式(示例3):为防止代码异常导致流无法关闭,因此在finally中对流进行关闭
1 示例3 2 import java.io.*; 3 4 class FileWriterDemo2 5 { 6 public static void main(String[] args) 7 { 8 FileWriter fw = null;//在外面建立引用 9 try 10 { 11 fw = new FileWriter("demo.txt");//在里面进行初始化 12 fw.write("abcdefg"); 13 14 } 15 catch (IOException e) 16 { 17 System.out.println("catch:"+e.toString()); 18 } 19 finally 20 { 21 try 22 { 23 if(fw!=null) 24 fw.close(); 25 } 26 catch (IOException e) 27 { 28 System.out.println(e.toString()); 29 } 30 31 } 32 33 } 34 }
需求:读取一个文文件,将读取到的字符打印到控制台。(使用FileReader)
第一种读取方式:使用read()方法读取文本文件数据(示例4)
1 示例4: 2 3 class FileReaderDemo 4 { 5 public static void main(String[] args) throws IOException 6 { 7 //创建一个文件读取流对象,和指定名称的文件相关联。 8 //要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException 9 FileReader fr = new FileReader("demo.txt"); 10 11 //调用读取流对象的read方法。 12 //read():一次读一个字符。而且会自动往下读。 13 14 int ch = 0; 15 16 while((ch=fr.read())!=-1) 17 { 18 System.out.println((char)ch); 19 } 20 21 22 /* 23 while(true) 24 { 25 int ch = fr.read(); 26 if(ch==-1) 27 break; 28 System.out.println("ch="+(char)ch); 29 } 30 */ 31 32 33 34 fr.close(); 35 36 37 } 38 }
第二种读取方式:使用read(char[])方法读取文本文件数据(示例5)。
1 示例5 2 3 4 import java.io.*; 5 6 class FileReaderDemo2 7 { 8 public static void main(String[] args) throws IOException 9 { 10 FileReader fr = new FileReader("demo.txt"); 11 12 13 //定义一个字符数组。用于存储读到字符。 14 //该read(char[])返回的是读到字符个数。 15 char[] buf = new char[1024]; 16 17 int num = 0; 18 while((num=fr.read(buf))!=-1) 19 { 20 System.out.println(new String(buf,0,num)); 21 } 22 23 24 fr.close(); 25 } 26 }
时间: 2024-10-24 04:52:54