1 File 类可以用于表示文件和目录的信息,但是它不表示文件的内容。
FileInputStream和FileOutputStream的简单操作
将1.txt文件下的参数复制到2.txt里面
@Test
public void readText() throws FileNotFoundException {
String path = "E:\\dir\\";
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, "1.txt");
FileInputStream in = new FileInputStream(file);
FileOutputStream out = new FileOutputStream(new File(dir, "2.txt"));
try {
byte[] buf = new byte[2];//缓冲区大小字节为2
int by = 0;
while ((by= in.read(buf))!= -1) {
err.println("length::"+by+"==========buf::"+new String(buf));
out.write(buf,0,by);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(in != null && out != null) {
try {
in.close();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
nio复制文件
@Test
public void nioCopy() throws IOException {
String path = "E:\\copy\\";
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, "mutual_finance.7z");
/* 获得源文件的输入字节流 */
FileInputStream fin = new FileInputStream(file);
/* 获取输入字节流的文件通道 */
FileChannel fcin = fin.getChannel();
/* 获取目标文件的输出字节流 */
FileOutputStream fout = new FileOutputStream(new File(dir, "mutual_finance2.7z"));
/* 获取输出字节流的文件通道 */
FileChannel fcout = fout.getChannel();
/* 为缓冲区分配 1024 个字节 */
ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
long start = System.currentTimeMillis();
while (true) {
/* 从输入通道中读取数据到缓冲区中 */
int r = fcin.read(buffer);
err.println("r::"+r);
/* read() 返回 -1 表示 EOF */
if (r == -1) {
break;
}
/* 切换读写 */
buffer.flip();
/* 把缓冲区的内容写入输出文件中 */
fcout.write(buffer);
/* 清空缓冲区 */
buffer.clear();
}
long end = System.currentTimeMillis();
err.println("耗时"+(end - start)/1000);
}
网友评论