不经常写java文件处理这部分,所以写的时候时常知识很模糊。最近因为机器学习需要处理数据集,在写java程序的时候使用了文件的知识。索性整理在这。方便以后使用。如有错误恳请指点。
基本步骤:
-
创建【文件】
例: File f = new File("e:\\新建文本文档.txt");
- 创建【文件流】
FileReader file = new FileReader(f) //文件字节(输入/输出)流
FileInputStream FileOutputStream //文件字符(输入/输出)流
FileReader FileWriter
- 创建文件(输入/输出)【通道】
BufferedReader in = new BufferedReader(file);
- 【读】文件(通过创建的通道对象)
in.readLine()【BufferedReader可以readLine()】
- 【写】文件
字符写入的时候需要用flush()
- 【关闭】通道、文件
Java的I/O读写:
- 输入:写入内存
- 输出:从内存取数据
I/O通道能走两种内容:1.字节 2.字符
文件字节输入/输出流 | 文件字符输入/输出流 |
FileInputStream | FileReader |
FileOutputStream | FileWriter |
输入管道 | 输入管道 | |
字节流(一个字节) | InputStream | OutputStream |
字符流(1-3个字节) | Reader | Writer |
在通道上加一个缓冲区 (减少读取次数) | BufferedReader | BufferedWriter |
注意:
大对象(图片等其他文件等)只能是字节流(二进制),对文字信息(推荐)用字符处理(如果用字符通道需要强制刷新,有缓存的问题 flush();)
具体步骤以及补充:
//1.构建文件 f就是对应的文件
File f=new File("路径名字(用\\)");
//2.读进来,构建管道
FileInputStream in=new FileInputStream(f);//针对文件f的输入通道
//3.读一下
int c=in.read();//返回一个整形,因为字节流跑的内容是AscⅡ码值转成字符 (char)c;读到末尾返回-1
常用while((int c=in.read())!=-1){}判断
//4.写入(覆写和追加)
File f2......//创建
FileOutStream out=new FileOutStream(f2);//构造f2通道
out.write((char)c);
//5.关闭先将输入通道关闭掉
如果用字符需要强制刷新,有缓存的问题 flush();
//6.基于缓冲的读取
while((s=br.readLine)!=null){
//需要缓冲这里涉及到回车内容 软回车(\n) 正真的回车(\r\n)
}
//7.追加内容FileWriter(~,true);
//8.解决中文转码
FileReader ff=new FileReader(new FileInputStream(f),"UTF-8");//选用字节读,指定编码