JAVA笔记---IO流与文件读写
来源:互联网 发布:pop3默认端口 编辑:程序博客网 时间:2024/05/17 05:00
好几次遇到文件的读取忘了具体的用法了,所以这里写一篇关于JAVA关于使用IO流读写文件的笔记,方便以后查询。
首先需要明白程序是运行在内存和CPU所构成的资源里, 语句就是对CPU的操作, 而变量和new是对内存的操作, 操作内存里的东西非常便利, 要么声明变量, 要么用 new,可是有很多东西需要程序来操作, 它们不在内存里, 比如键盘、硬盘、打印机、网络等, 这个时候就需要一种模式来和内存外的东西打交道, 类似于管道(pipe), 内存里和内存外就构成了入和出的方向, 到内存里就是入, 到内存外就是出,这就是IO流的概念。
根据操作对象的类型是字符还是字节可将IO流可分为两大类: 字节流和字符流。
字节流: 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件
字符流: 以字符为单位读取文件,常用于读文本,数字等类型的文件
不管是哪种类型,可以按照下面三个步骤来使用:
第一步:定位需要操作的文件的位置; 第二步: 建立管道; 第三步,操作管道。
1.字节流
这里以复制一张图片为例来看下具体用法, 以下直接给出代码:
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class JavaIOStudy { public static void main(String[] args) { //第一步:定位文件所在的位置并新建一个文件用于确定复制的文件的文件名 File infile = new File("/Users/dxy/sync/infile.jpg"); File outfile = new File("/Users/dxy/sync/outfile.jpg"); try { //第二步:建立文件流管道 FileInputStream fis = new FileInputStream(infile); FileOutputStream fos = new FileOutputStream(outfile); //第三步:操作文件流 //第一种方式, 一次读一个字节, 会循环该文件的字节数 int length1 = fis.available(); for(int i=0;i<length1;i++){ fos.write(fis.read()); } //第二种方式, 一次读取多个字节 //建一个byte数值用于临时成块存放字节文件,建议使用2的n次方,这样计算机的处理效率相对会高一些 byte[] tmp = new byte[8192] ; //设置读取的次数 int length2 = fis.available()/8192; for (int i = 0; i < length2; i++) { fis.read(tmp); fos.write(tmp); } //处理最后一次少读取的部分 int size = fis.read(tmp) ; //第一个参数还是byte数组形成的临时缓冲区,第二个参数是从数组的哪里开始向文件写,第三个参数是写多少。 fos.write(tmp, 0, size) ; //最后关闭文件流 fis.close(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
2.字符流
字符流用来读取文本、数字等类型的文件,相对字节流来说使用的范围更广泛些,以下以一个txt文件复制以及读取该文件里面的字符并换行显示到控制台上面,直接给出代码如下:
import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;public class JavaIOzifu { public static void main(String[] args) { File intfile = new File("/Users/dxy/sync/intfile.txt"); //outfile一开始不存在,通过读取intfile里面的内容赋值给outfile File outfile = new File("/Users/dxy/sync/outfile.txt"); try { //FileReader不能读取一行文件,只有read()方法一个个读取字符 FileReader fr = new FileReader(intfile); FileWriter fw = new FileWriter(outfile); //BufferedReader带有缓冲区的流, 可以调用readLine()方法读取一行String BufferedReader bfr = new BufferedReader(fr); //和BufferedReader对应的是BufferWriter,但是不同的平台上,使用BufferWriter有些控制字符比如回车、换行之类的可能会有差别 //PrintWriter它会适应不同的系统平台, 所以建议使用PrintWriter PrintWriter pw = new PrintWriter(fw); String temString = null; while((temString = bfr.readLine())!= null){ //调用println()方法可以写入的时候进行换行 pw.println(temString); //print()方法和write()方法都是写文件不换行 //pw.print(temString); //pw.write(temString); System.out.println(temString); } //关闭流, 注意这一步是必须的 bfr.close(); //有了缓冲区,向文件写的字符并没有被直接写到文件里,而是被放到PrintWriter的缓冲区里 //所以需要调用flush方法,以便将缓冲区的内容刷新到文件中 //或者直接调用close方法, close会调用flush方法,同时close会关闭这个流。 pw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
2 0
- JAVA笔记---IO流与文件读写
- java 文件IO字节流读写笔记
- IO与文件读写---Java的IO流架构
- IO与文件读写---Java的IO流架构
- IO与文件读写---Java的IO流架构
- java io流读写文件
- java IO流读写文件
- JAVA IO读写文件
- Java IO 读写文件
- JAVA-IO读写文件
- java IO读写文件
- Java IO 读写文件
- Java IO 读写文件
- Java IO文件读写
- 【Java基础专题】IO与文件读写---Java的IO流架构
- java IO流分析,java文件读写
- C#常用IO流与读写文件
- java io 流,批量读写文件
- CPU内部组成结构及指令执行过程
- 蓝桥杯--闰年判断&&01字串
- java关键字
- ANR异常
- 蓝桥杯--查找整数&&数列排序
- JAVA笔记---IO流与文件读写
- angularjs material 实现搜索框
- JAVA笔记---集合与泛型
- hibernate不能自动创建表修bug记录
- android_activity的生命周期和启动模式
- JAVA笔记---反射
- 我的mac使用备忘
- 浅谈数据库设计原则(适合新人)
- JAVA笔记---线程同步