API基础学习(三)(IO流) 作者:一衡 一、IO流的概述和分类 1、IO流的作用,可以吧数据存储到文本文件上,也可以从文本文件中读取数据。其中 的输入和输出是相对于Java程序。有力于数据的持久化存储。 常见应用为:文件复制、上传文件、下载文件。 2、由API可以查出,IO属于java.IO包,所以在使用时需要导包。 3、IO分类有:输出流与输入流;(FileWriter/FileReader)。 4、构造方法: 1)输出流:FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。 FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。 例如:public class FileWriterDemo { public static void main(String[] args) throws IOException { //创建输出流对象 FileWriter fw = new FileWriter("d:\\a.txt"); 注:如果没有路径直接跟文本文档时,会自动生成到项目文件内。如果后面不加true是,在调用FileWriter方法时,系统先找目标路径或者相对路径中如果找不到时,会新建,如果路径中有,将会清空文本中的信息。 2)、输入流:FileReader(String fileName) :在给定从中读取数据的文件名的情况下创建一个新的文件,其中读取文件必须是有效的。 例如:public class FileReaderDemo { public static void main(String[] args) throws IOException { //创建输入流对象 FileReader fr = new FileReader("fr.txt"); 5、文本的写入。 例如: public class FileWriterDemo3 { public static void main(String[] args) throws IOException { //创建输出流对象 FileWriter fw = new FileWriter("b.txt"); //void write(String str):写一个字符串数据 //fw.write("abcde"); //void write(String str,int index,int len):写一个字符串中的一部分数据 //fw.write("abcde",0,5); //fw.write("abcde",1,3); fw.close();释放资源 //void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。'a',97,其中数字97只会输出‘a’。 6、文本的读取。 例如: public class FileReaderDemo { public static void main(String[] args) throws IOException { //创建输入流对象 FileReader fr = new FileReader("fr.txt"); //一次读取一个数组 char[] chs = new char[1024]; int len;//实际读取长度 while((len=fr.read(chs))!= -1){ System.out.print(new String(chs,0,len)) } fr.close(); 7、文本的copy: 例如:public class CopyFileDemo2 { public static void main(String[] args) throws IOException { //创建输入流对象 FileReader fr = new FileReader("FileWriterDemo.java"); //创建输出流对象 FileWriter fw = new FileWriter("Copy.java"); //读写数据 char[] chs = new char[1024]; int len; while((len=fr.read(chs))!=-1) { fw.write(chs, 0, len); } //释放资源 fw.close(); fr.close(); } } 二、缓冲流使用; 1、读写 例如: BufferedWriter bw = new BufferedWriter(new FileWriter("bw2.txt")); for(int x=0; x<10; x++) { bw.write("hello"+x); bw.newLine(); bw.flush(); } bw.close(); */ BufferedReader br = new BufferedReader(new FileReader("br.txt")); String line; //1:br.readLine() //2:line=br.readLine() //3:line != null while((line=br.readLine())!=null) { System.out.println(line); } br.close(); } } 2、缓冲流特殊使用 * 缓冲流的特殊功能: * BufferedWriter * void newLine():写一个换行符,这个换行符由系统决定 * BufferedReader * String readLine():一次读取一行数据,但是不读取换行符 */ public class BufferedStreamDemo { public static void main(String[] args) throws IOException { /* BufferedWriter bw = new BufferedWriter(new FileWriter("bw2.txt")); for(int x=0; x<10; x++) { bw.write("hello"+x); //bw.write("\r\n"); bw.newLine(); bw.flush(); } bw.close(); */ BufferedReader br = new BufferedReader(new FileReader("br.txt")); String line; //1:br.readLine() //2:line=br.readLine() //3:line != null while((line=br.readLine())!=null) { System.out.println(line); } br.close(); } } 缓冲流的复制 public class CopyFileDemo { public static void main(String[] args) throws IOException { //创建输入缓冲流对象 BufferedReader br = new BufferedReader(new FileReader("FileWriterDemo.java")); //创建输出缓冲流对象 BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java")); //读写数据 String line; while((line=br.readLine())!=null) { bw.write(line); bw.newLine(); bw.flush(); } //释放资源 bw.close(); br.close(); } |