java io 一些总结
来源:互联网 发布:软件补丁 编辑:程序博客网 时间:2024/05/18 20:09
首先,java io分为两大阵营,字节流,字符流。结构图如下:
一些常用类的用法以及注意点:
- IO流(FileInputStream)
FileInputStream fis = new FileInputStream("aaa.txt"); //创建一个文件输入流对象,并关联aaa.txtint b; //定义变量,记录每次读到的字节while((b = fis.read()) != -1) { //将每次读到的字节赋值给b并判断是否是-1 System.out.println(b); //打印每一个字节}fis.close(); //关闭流释放资源
- IO流(read()方法返回值为什么是int)
答:因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111。那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上。24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型。
- IO流(FileOutputStream)
FileOutputStream fos = new FileOutputStream("bbb.txt"); //如果没有bbb.txt,会创建出一个//fos.write(97); //虽然写出的是一个int数,但是在写出的时候会将前面的24个0去掉,所以写出的一个bytefos.write(98);fos.write(99);fos.close();
- IO流(拷贝图片)
FileInputStream fis = new FileInputStream("01.mp3"); //创建输入流对象,关联01.mp3FileOutputStream fos = new FileOutputStream("copy.mp3");//创建输出流对象,关联copy.mp3int b;while((b = fis.read()) != -1) { fos.write(b);}fis.close();fos.close();
- IO流(定义小数组的标准格式)
FileInputStream fis = new FileInputStream("01.mp3");FileOutputStream fos = new FileOutputStream("copy.mp3");int len;byte[] arr = new byte[1024 * 8]; //自定义字节数组while((len = fis.read(arr)) != -1) {//fos.write(arr);fos.write(arr, 0, len); //写出字节数组写出有效个字节个数}fis.close();fos.close();
- IO流(BufferedInputStream和BufferOutputStream拷贝)
FileInputStream fis = new FileInputStream("01.mp3"); //创建文件输入流对象,关联致01.mp3BufferedInputStream bis = new BufferedInputStream(fis); //创建缓冲区对fis装饰FileOutputStream fos = new FileOutputStream("copy.mp3"); //创建输出流对象,关联copy.mp3BufferedOutputStream bos = new BufferedOutputStream(fos); //创建缓冲区对fos装饰int b;while((b = bis.read()) != -1) { bos.write(b);}bis.close(); //只关装饰后的对象即可bos.close();
- IO流(flush和close方法的区别)
答:
flush()方法:
用来刷新缓冲区的,刷新后可以再次写出 。
close()方法:
用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出 。
- IO流(字节流读写中文)
- 字节流读取中文的问题
- 字节流在读中文的时候有可能会读到半个中文,造成乱码
- 字节流写出中文的问题
- 字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组
- 写出回车换行 write(“\r\n”.getBytes());
- IO流(流的标准处理异常代码1.6版本及其以前)
FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("aaa.txt"); fos = new FileOutputStream("bbb.txt"); int b; while((b = fis.read()) != -1) { fos.write(b); } } finally { try { if(fis != null) fis.close(); }finally { if(fos != null) fos.close(); } }
- IO流(流的标准处理异常代码1.7版本)
try( FileInputStream fis = new FileInputStream("aaa.txt"); FileOutputStream fos = new FileOutputStream("bbb.txt"); MyClose mc = new MyClose(); ){ int b; while((b = fis.read()) != -1) { fos.write(b); } }
原理:
在try()中创建的流对象必须实现了AutoCloseable这个接口,如果实现了,在try后面的{}(读写代码)执行后就会自动调用,流对象的close方法将流关掉
- IO流(图片加密)
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.jpg")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("b.jpg")); int b; while((b = bis.read()) != -1) { bos.write(b ^ 123); } bis.close(); bos.close();
- IO流(字符流FileReader)
FileReader fr = new FileReader("aaa.txt"); //创建输入流对象,关联aaa.txt int ch; while((ch = fr.read()) != -1) { //将读到的字符赋值给ch System.out.println((char)ch); //将读到的字符强转后打印 } fr.close();
- IO流(字符流FileWriter)
FileWriter fw = new FileWriter("aaa.txt"); fw.write("aaa"); fw.close();
- IO流(字符流的拷贝)
FileReader fr = new FileReader("a.txt"); FileWriter fw = new FileWriter("b.txt"); int ch; while((ch = fr.read()) != -1) { fw.write(ch); } fr.close(); fw.close();
- IO流(自定义字符数组的拷贝)
FileReader fr = new FileReader("aaa.txt"); //创建字符输入流,关联aaa.txt FileWriter fw = new FileWriter("bbb.txt"); //创建字符输出流,关联bbb.txt int len; char[] arr = new char[1024*8]; //创建字符数组 while((len = fr.read(arr)) != -1) { //将数据读到字符数组中 fw.write(arr, 0, len); //从字符数组将数据写到文件上 } fr.close(); //关流释放资源 fw.close();
- IO流(带缓冲的字符流)
BufferedReader br = new BufferedReader(new FileReader("aaa.txt")); //创建字符输入流对象,关联aaa.txt BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt")); //创建字符输出流对象,关联bbb.txt int ch; while((ch = br.read()) != -1) { //read一次,会先将缓冲区读满,从缓冲去中一个一个的返给临时变量ch bw.write(ch); //write一次,是将数据装到字符数组,装满后再一起写出去 } br.close(); //关流 bw.close();
BufferedReader的read()方法读取字符时会一次读取若干字符到缓冲区, 然后逐个返回给程序, 降低读取文件的次数, 提高效率。
BufferedWriter的write()方法写出字符时会先写到缓冲区, 缓冲区写满时才会写到文件, 降低写文件的次数, 提高效率。
- IO流(readLine()和newLine()方法)
BufferedReader的readLine()方法可以读取一行字符(不包含换行符号).
BufferedWriter的newLine()可以输出一个跨平台的换行符号”\r\n”.
BufferedReader br = new BufferedReader(new FileReader("aaa.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt")); String line; while((line = br.readLine()) != null) { bw.write(line); //bw.write("\r\n"); //只支持windows系统 bw.newLine(); //跨平台的 } br.close(); bw.close();
- IO流(使用指定的码表读写字符)
FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表)。
FileWriter是使用默认码表写出文件, 如果需要使用指定码表写出, 那么可以使用OutputStreamWriter(字节流,编码表)。
BufferedReader br = //高效的用指定的编码表读 new BufferedReader(new InputStreamReader(new FileInputStream("UTF-8.txt"), "UTF-8")); BufferedWriter bw = //高效的用指定的编码表写 new BufferedWriter(new OutputStreamWriter(new FileOutputStream("GBK.txt"), "GBK")); int ch; while((ch = br.read()) != -1) { bw.write(ch); } br.close(); bw.close();
0 0
- java io 一些总结
- 【IO】java IO 总结
- java中的io系统总结及一些常用的操作
- Java实现爬虫的文件IO的一些总结
- [Java 12 IO] IO 总结
- Java IO Stream 总结
- java io流总结
- Java IO Stream 总结
- Java IO Stream 总结
- Java.io总结
- Java IO完全总结
- Java IO总结
- java IO流总结
- Java io学习总结
- JAVA IO总结
- Java IO流总结
- JAVA.Io总结
- java io流总结
- Java千百问_05面向对象(010)_java中重载和覆盖有什么关系
- UVA - 11584 Partitioning by Palindromes
- 在idea删除了引用的class怎么找回
- 第九周实践项目1————深复制体验(2)
- Java基础学习总结(53)——HTTPS 理论详解与实践
- java io 一些总结
- 自定义Dialog
- 编程之美之发帖水王
- 内存操作函数(C)
- 一个简单自激振荡器电路分析
- 一款新颖实用的安防产品--丁盯智能门磁
- java的日期格式化输出
- js判断整数和正浮点数
- Adb connection Error:远程主机强迫关闭了一个现有的连接