java基础之IO流

mac2022-06-30  34

IO流的概述和分类:

流可分为两大类,字节流和字符流,且他们都有输入流(从屏幕、硬盘或是其他数据源读取数据放入内存中)和输出流(用来向屏幕、硬盘等目的地输出内容),字节流就是一个字节一个字节的读取或是输出(字节都是8位,0到255之间的整数),而字符流是按照文本的那种字符来读取和输出,就是直接读取数字、字母或是中文字等这些我们能够直接识别的字符;至于缓冲流,是指当输出的时候带 有缓冲功能的流(BufferOutputStream),没有缓冲功能的流当其输出时是直接存入目的地,如果有缓冲功能,则会将输出的内容先放置在内存中,等到有一定数据量的时候,或是流关闭、或调用flush()方法时,才会将相应的内容保存到硬盘或是其它目的地中

之所以有字符流缓冲区,是因为把字符流都作为缓冲处理能提高字符流的读写效率,如果没有缓存,例如FileReader对象,每次调用read()方法进行读操作时,都会直接去文件中读取字节,转换成字符并返回,这样频繁的读取文件效率很低。缓冲区实现原理就是将数组进行封装。缓冲的字符流的出现提高了对流的操作效率,缓冲的存在是为了增强流的功能,因此在建立缓冲的字符流对象时,要先有流对象的存在

图片转载于: https://blog.csdn.net/qq_39588027/article/details/80243282 一、什么是IO流 IO流:IO流用来处理设备之间的数据传输,可以把数据存储到文件,也可以从文件中读取数据。 常见应用:文件复制、上传文件、下载文件等。 ###二、FileWriter(输出流) 1.往文件中写数据:写数据------输出流------FileWriter 2.方法:FileWriter(String filename):传递一个文件名称 3.输出流写数据的步骤: A.创建输出流对象 B.调用输出流对象的写数据方法 C.释放资源 练习之写一个字符串到a.txt文件中

public class FileWriterTest { public static void main(String[] args) throws IOException { //创建输出流对象 FileWriter fw=new FileWriter("d:\\a.txt");//绝对路径 //FileWriter fw=new FileWriter("a.txt");//相对当前项目的路径 /* 创建输出流对象做了哪些事情: * A:调用系统资源创建了一个文件 * B:创建输出流对象 * C:把输出流对象指向文件 */ //调用输出流对象的写数据方法 fw.write("hello"); //刷新,数据没有直接写到文件,而是写到了内存缓冲区 fw.flush(); //先刷新,再释放资源,其实是通知系统释放和该文件相关的资源 fw.close(); } }

三、FileWriter写数据的方法 void write(String str);//写一个字符串数据 void write(String str,int index,int len);//写一个字符串中的一部分数据 void write(int ch);//写一个字符数据,既可以写char类型的数据,也可以char对应的int类型。‘a’-‘z’=97–122,‘A’-‘Z’=65–90. void write(char[] chs);//写一个字符数组数据 void write(char[] chs,int index,int len);//写一个字符数组的一部分数据 四、FileWriter之换行和追加 windows:\r\n linux:\n mac:\r

true表示追加,默认是false。

五、FileReader读数据 1.从文件中读数据 读数据--------输入流-------FileReader 2.方法:FileReaderr(String filename):传递一个文件名称 3.输入流读数据的步骤: A.创建输入流对象 B.调用输入流对象的读数据方法 C.释放资源 练习之 从a.txt文件中读数据到控制台

public class FileReaderDemo1 { public static void main(String[] args) throws IOException { FileReader fr=new FileReader("a.txt"); //方法一:一次读取一个字符 /*int ch; //所有数据全部读取完的标志是-1 while((ch=fr.read())!=-1) {//1.fr.read() 2.ch=fr.read() 3.ch!=-1 //System.out.println(ch);//这样输出的是int型,并且ln本身就有换行的意思。 System.out.print((char)ch);*/ //方法二:一次读取一个数组 char[] ch=new char[1024]; int len; while((len=fr.read(ch))!=-1){ System.out.print(new String(ch,0,len)); } fr.flush(); fr.close(); } }

练习之复制文本文件 文件复制: 数据源:读数据-------FileReader 目的地:写数据-------FileWriter

public class CopyFileDemo { public static void main(String[] args) throws IOException { FileReader fr=new FileReader("b.txt"); FileWriter fw=new FileWriter("a.txt"); //一次读取一个字符 /*int ch; while((ch=fr.read())!=-1) { fw.write(ch); */ //一次读取一个字符数组 char[] ch=new char[1024]; int len; while((len=fr.read(ch))!=-1) fw.write(ch); fw.flush(); fw.close(); } }

六、字符缓冲流BufferedWriter、BufferedReader: 1. BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符,数组和字符串的高效写入。 BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 2.读写数据的方式

public class BufferedStreamDemo { public static void main(String[] args) throws IOException { //创建输出缓冲流 //BufferedWriter bw=new BufferedWriter(new FileWriter("a.txt")); // bw.write("hello"); // bw.flush(); // bw.close(); //创建输入缓冲流 BufferedReader br=new BufferedReader(new FileReader("a.txt")); //一次读一个字符的情况 // int ch; // while((ch=br.read())!=-1) { // System.out.print((char)ch); // } // //释放资源 // br.close(); //一次读一个字符数组的情况] char[] chs=new char[1024]; int len; while((len=br.read(chs))!=-1) { System.out.print(new String(chs,0,len)); } br.close(); } }

3.字符缓冲流复制文本文件的俩种方式 分析: 读数据-----FileReader-----高效读取数据------BufferedReader 写数据------FileWriter------高效的写数据-------BufferedWriter

public class CopyFileDemo { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new FileReader("b.txt")); BufferedWriter bw=new BufferedWriter(new FileWriter("a.txt")); //缓冲流复制文本文件的2种方式 //一次读取一个字符串 /*int ch; while((ch=br.read())!=-1) { //System.out.println((char)ch); bw.write((char)ch); }*/ //一次读取一个数组 char[] chs =new char[1024]; int len; while((len=br.read(chs))!=-1){ bw.write(chs,0,len); } bw.close(); } }

4.字符缓冲流的特殊功能 BufferedWriter: void newLine();写一个换行符,这个换行符由系统决定。 BufferedReader: String readLine();一次读取一行数据,但不读取换行符。 七、复制文本文件的5中方式

public class thestyleofcopy { public static void main(String[] args) throws IOException { String srcFileName="a.txt"; String destFileName="b.txt"; //method1(srcFileName,destFileName);//基本流一次读写一个字符 //method2(srcFileName,destFileName);//基本流一次读写一个字符数组 //method3(srcFileName,destFileName);//缓冲流一次读写一个字符 //method4(srcFileName,destFileName);//缓冲流一次读写一个字符数组 method5(srcFileName,destFileName);//缓冲流的特殊功能,一次读写一个字符串 } private static void method5(String srcFileName, String destFileName) throws IOException { BufferedReader br=new BufferedReader(new FileReader(srcFileName)); BufferedWriter bw=new BufferedWriter(new FileWriter(destFileName)); //一次读写一个字符串 String line; while((line=br.readLine())!=null) { bw.write(line); bw.newLine(); bw.flush(); } br.close(); bw.close(); } /* private static void method4(String srcFileName, String destFileName) throws IOException { BufferedReader br=new BufferedReader(new FileReader(srcFileName)); BufferedWriter bw=new BufferedWriter(new FileWriter(destFileName)); //一次读写一个字符数组 char[] chs=new char[1024]; int len; while((len=br.read(chs))!=-1) { bw.write(chs,0,len); bw.flush(); } br.close(); bw.close(); } private static void method3(String srcFileName, String destFileName) throws IOException { BufferedReader br=new BufferedReader(new FileReader(srcFileName)); BufferedWriter bw=new BufferedWriter(new FileWriter(destFileName)); //一次读写一个字符 int ch; while((ch=br.read())!=-1) { bw.write(ch); bw.flush(); } br.close(); bw.close(); } private static void method2(String srcFileName, String destFileName) throws IOException { FileReader fr=new FileReader(srcFileName); FileWriter fw=new FileWriter(destFileName); //一次读写一个字符数组 char[] chs=new char[1024]; int len; while((len=fr.read(chs))!=-1) { fw.write(chs,0,len); fw.flush(); } fr.close(); fw.close(); } /* private static void method1(String srcFileName, String destFileName) throws IOException { FileReader fr=new FileReader(srcFileName); FileWriter fw=new FileWriter(destFileName); //一次读写一个字符 int ch; while((ch=fr.read())!=-1) { fw.write(ch); fw.flush(); } fr.close(); fw.close(); }*/ }

八、把ArrayList集合中的字符串数据存储到文本文件 分析: A创建集合对象 B往集合中添加字符串元素 C创建输出流对象 D遍历集合,得到每一个字符串元素,然后把字符串元素作为数据写进文本文件

public class ArrayToText { public static void main(String[] args) throws IOException { ArrayList<String> array=new ArrayList<String>(); array.add("hello"); array.add("你好"); BufferedWriter bw=new BufferedWriter(new FileWriter("c.txt")); for(int i=0;i<array.size();i++) { String s=array.get(i); bw.write(s); bw.flush(); } bw.close(); } }

九、把文本文件中的数据读取到集合

/* * 把文本文件中的数据读取到集合 * 1.创建读输入缓冲流2.创建集合对象3.读取数据,每次读取一行当做一个元素写到集合中4.释放资源5.遍历集合 */ public class TextToArray { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new FileReader("c.txt")); ArrayList<String> array=new ArrayList<String>(); String line; while((line=br.readLine())!=null) { array.add(line); } br.close(); for(int i=0;i<array.size();i++) { String s=array.get(i); System.out.println(s); } } }
最新回复(0)