您的位置:首页 > 编程语言 > Java开发

Java IO 之 FileReader FileWriter 实现字符文件的复制(处理FileWriter新建文件失败的问题)

2016-11-23 09:33 911 查看
在使用FileWriter创建目标文件的时候,发现FileWriter竟然没有自动生成文件,后来自己测试一番,发现要在目录上加上斜杠即“/”,才能自动生成。

FileReader fw = new FileWriter("e:/MyAssetJob.txt");//这个就可以在e盘目录下正常生成文件

FileReader fw = new FileWriter("e:MyAssetJob.txt");//这个就不会在e盘目录下生成文件

也许是机缘巧合,我在d或者f或c盘的时候,代码是正常的,文件可以自动生成,但就是e盘就是不生成文件,我就尴尬了。

不信的可以自己测试下,也许是我电脑环境问题呢。

我又找了个电脑,测试也是cdf盘都可以自动生成文件,但是就是e盘新建失败。。。。

为什么使用缓冲区?

测试代码方法2,就是未使用缓冲区,读一个字符,就写一个字符。那么对硬盘结构有大概了解,就像老式的留声机吧,电影里都见过吧,有个磁头,在下面的大圆盘这读到一个字符,然后转半圈,然后再把读到的字符,写到大圆盘的另一个地方。这么来回的浪费时间。效率极低。

使用缓冲区,就可以先读很多,然后一起写过去。这么就节约时间。效率就提高了。

以下是复制一个字符文件的代码实现

对比以下2种方法的差别。

package com.lxk.FileTest;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
* 复制文件:先从硬盘读到内存,在写到硬盘
*/
class CopyText {
public static void main(String[] args) throws IOException {
fileCopyRightWay();
}

/**
* 用缓冲区读写,来提升读写效率。
*/
private static void fileCopyRightWay() {
FileWriter fw = null;
FileReader fr = null;
try {
fr = new FileReader("D:MyAssetJob.java");//读
fw = new FileWriter("e:/MyAssetJob.txt");//写
char[] buf = new char[1024];//缓冲区
int len;
while ((len = fr.read(buf)) != -1) {
fw.write(buf, 0, len);//读几个写几个
}
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}

if (fw != null) {
try {
fw.flush();
fw.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
}

/**
* 未用缓冲区进行读写,读一个字符就写一个字符。
*/
public static void fileCopyWrongWay() throws IOException {
//创建目的地。
FileWriter fw = new FileWriter("D:MyAssetJob.java");
//与已有文件关联。
FileReader fr = new FileReader("E:/MyAssetJob.java");

int ch;
while ((ch = fr.read()) != -1) {
fw.write(ch);
}
fw.close();
fr.close();
}
}


忽然发现,刚刚的 fw = new FileWriter("e:MyAssetJob.txt");  这个文件竟然创建在项目的根目录下。不是在e盘根目录下。具体如下图:



然后我debug,跟踪了一下。fw的path确实没有发生变化。



这我就看不懂了,为什么不加斜杠,这个文件会被复制到项目的跟目录下,而不是e盘的根目录下呢?难道e代表的是environment的意思?瞎猜的,不知道。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐