Java解决java.io.FileNotFoundException:E:workwor。。。
⼀、问题
在使⽤FileInputStream或FileOutputStream时会遇到如下问题1和问题2。
问题1:
java.io.FileNotFoundException: .\ (系统不到指定的路径。)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at st.InputStreamTest.fileInputStream(InputStreamTest.java:13)
at st.InputStreamTest.main(InputStreamTest.java:27)
问题2:
java.io.FileNotFoundException: .\xx\xx (拒绝访问。)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at st.InputStreamTest.fileInputStream(InputStreamTest.java:13)
at st.InputStreamTest.main(InputStreamTest.java:27)
⼆、分析
在进⾏分析时,我得说清楚什么时候抛拒绝访问,什么时候抛不到指定路径。原因是这样的,在构造⼀个File对象时,指定的⽂件路径是什么都可以,就算不存在也能够构造File对象,但是,现在你要对⽂件进⾏输⼊输出操作,也就是InputStream和OutputStream操作时,如果填写的路径不存在,那么就会报系统不到指定路径,如果指定的是⽬录时,就会报拒绝访问异常。看了这个前提之后,在继续往下读。
当遇到问题1时,的确是当前所指定的⽂件不存在或者⽬录不存在。
当遇到第⼆个问题时,是因为你访问的是⼀个⽂件⽬录,如果这个⽬录没有权限访问或者是⽬录不存在,就会抛出问题2的异常。
三、解决办法
第⼀个的解决办法是,先判断⼀下当前⽂件是否存在,如果存在则略过,如果不存在,在创建,具体做法如下:
//在填写⽂件路径时,⼀定要写上具体的⽂件名称(xx.txt),否则会出现拒绝访问。
File file = new File("./");
if(!ists()){
//先得到⽂件的上级⽬录,并创建上级⽬录,在创建⽂件
try {
//创建⽂件
} catch (IOException e) {
e.printStackTrace();
}
}
第⼆个的解决办法是,在填写⽂件的路径时⼀定要具体到⽂件,如下:
File file = new File("./");
1
⽽不能写成:
File file = new File("./mywork/");
1
因为这样你访问的是⼀个⽬录,因此就拒绝访问。
四、源码(我的demo)
1、⽂件输出流
/**
* ⽂件输出流⽅法
*/
public void fileOutputStream() {
File file = new File("./");
FileOutputStream out = null;
try {
if (!ists()) {
/
/ 先得到⽂件的上级⽬录,并创建上级⽬录,在创建⽂件 ParentFile().mkdir();
}
//创建⽂件输出流
out = new FileOutputStream(file);
//将字符串转化为字节
byte[] byteArr = "FileInputStream Test".getBytes();
out.write(byteArr);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
2、⽂件输⼊流⽅法
/**
* ⽂件输⼊流
*/
public void fileInputStream() {
File file = new File("./");
FileInputStream in = null;
/
/如果⽂件不存在,我们就抛出异常或者不在继续执⾏
//在实际应⽤中,尽量少⽤异常,会增加系统的负担
if (!ists()){
throw new FileNotFoundException();
}
try {
in = new FileInputStream(file);
byte bytArr[] = new byte[1024];
int len = in.read(bytArr);
System.out.println("Message: " + new String(bytArr, 0, len)); in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
如有错误,还望指正,谢谢合作。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论