Java流 实现文件的读写及复制
原理:
读
把硬盘的文件读入内存,
写
把缓存的数据写入硬盘
需要用到流对象,InputStream 、OutputStream、FileInputStream、FileOutputStream
至于什么是流,这个概念暂时不清楚,大家可以下图,我的理解:其本质可以传输的字节数据,从下面可以看出机包括原始数据,也包括了工具,感觉和对象的概念一样,万物皆可对象,万物皆可流。
1.写操作:
把数据写入硬盘:
代码如下:
File file = new File("d:/a.txt");
OutputStream os= new FileOutputStream(file);
String msg= "hello world !\r\n hello tomorrow !";
os.write(msg.getBytes());
os.close();
总结:把实体文件转换为Java对象,转换为流,写入硬盘,释放资源
2.读文件
把硬盘中的数据读入内存,用console显示出来。
File file = new File("d:/a.txt");
InputStream is= new FileInputStream(file);
byte[] buf = new byte[1024];
int len=0;
while( (len=is.read(buf)) != -1 ){
System.out.write(buf,0,len);
}
is.close();
总结: 把数据从硬盘读入内存,也是需要把实体文件对象化,流化,这里在读的时候多了点心眼。你要按照人家给的方法读。比如一次只能读一行(以\r\n结尾的为一行)读到完有个判断遇见文件结束符EOF,read方法则返回-1,结束循环。
输出打印则和读是同步的,流传输的时候有个阀值,就好比管道的口径,我设置的是1M。
最后释放资源。
1.文件的本地复制实现
把文件读入内存,同步输出到硬盘
public void copy(File srcFile ,File desFile) throws IOException {
OutputStream os= new FileOutputStream(desFile);
// 文件写入内存:
InputStream is = new FileInputStream(srcFile);
byte[] buf = new byte[1024];
int len=0;
while((len= is.read(buf)) != -1){
//写入硬盘
os.write(buf,0,len);
}
os.close();
is.close();
}
main里面,最后调用
File srcFile= new File("d:/a.txt");
File desFile= new File("d:/d.txt");
ctf.copy(srcFile, desFile);
以下是全部代码:
package com.javabase.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class ****TestFile {
public static void main(String[] args) throws IOException {
****TestFile ctf = new ****TestFile();
// ctf.write();
// ctf.read();
File srcFile = new File("d:/a.txt");
File desFile = new File("d:/d.txt");
ctf.copy(srcFile, desFile);
}
public void copy(File srcFile, File desFile) throws IOException {
OutputStream os = new FileOutputStream(desFile);
// 文件写入内存:
InputStream is = new FileInputStream(srcFile);
byte[] buf = new byte[1024];
int len = 0;
while ((len = is.read(buf)) != -1) {
// 写入硬盘
os.write(buf, 0, len);
}
os.close();
is.close();
}
public void write() throws IOException {
File file = new File("d:/a.txt");
OutputStream os = new FileOutputStream(file);
String msg = "hello world !\r\n hello tomorrow !";
os.write(msg.getBytes());
os.close();
}
public void read() throws IOException {
File file = new File("d:/a.txt");
InputStream is = new FileInputStream(file);
byte[] buf = new byte[1024];
int len = 0;
while ((len = is.read(buf)) != -1) {
System.out.write(buf, 0, len);
}
is.close();
}
}