我实际上检查过可能与此相关的其他帖子,我找不到任何问题的答案。所以,不得不重新创建:
使用以下代码在给定位置不会创建文件:
File as = new File ("C:\\Documents and Settings\\<user>\\Desktop\\demo1\\One.xls");
if (!as.exists()) {
as.createNewFile();
}
FileOutputStream fod = new FileOutputStream(as);
BufferedOutputStream dob = new BufferedOutputStream(fod);
byte[] asd = {65, 22, 123};
byte a1 = 87;
dob.write(asd);
dob.write(a1);
dob.flush();
if (dob!=null){
dob.close();
}
if(fod!=null){
fod.close();
代码运行正常,我没有得到任何FileNotFoundException !! 我有什么想念的吗?
答案 0 :(得分:1)
您可以像这样重写代码:
BufferedOutputStream dob = null;
try {
File file = new File("C:\\Documents and Settings\\<user>\\Desktop\\demo1\\One.xls");
System.out.println("file created:" + file.exists());
FileOutputStream fod = new FileOutputStream(file);
System.out.println("file created:" + file.exists());
BufferedOutputStream dob = new BufferedOutputStream(fod);
byte[] asd = {65, 22, 123};
byte a1 = 87;
dob.write(asd);
dob.write(a1);
//dob.flush();
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
if (dob != null) {
dob.close();
}
}
关闭此输出流并释放与该流关联的所有系统资源。 FilterOutputStream的close方法调用其flush方法,然后调用其基础输出流的close方法。
dob.flush()
块中的try
已被注释掉,因为dob.close()
块中的finally
行会刷新流。此外,它释放系统资源(例如“关闭文件”),如上面的apidoc引用中所述。使用finally block是一种很好的做法:当尝试阻止退出时, finally块始终执行。这确保即使发生意外异常也会执行finally块。但最终不仅仅是异常处理有用 - 它允许程序员避免因返回,继续或中断而意外绕过清理代码。将清理代码放在finally块中总是一种很好的做法,即使没有预期的例外情况也是如此。
创建文件输出流以写入由指定的File对象表示的文件。 创建一个新的FileDescriptor对象来表示此文件连接。 首先,如果有安全管理器,则调用其checkWrite方法,并将file参数表示的路径作为其参数。
如果文件存在但是是目录而不是常规文件,则不存在但无法创建,或者由于任何其他原因而无法打开,则会抛出FileNotFoundException 。
FileDescriptor的位置:
文件描述符类的实例充当底层机器特定结构的不透明句柄,表示打开文件,打开套接字或其他字节源或接收器。文件描述符的主要实际用途是创建一个FileInputStream或FileOutputStream来包含它。
应用程序不应创建自己的文件描述符。
此代码应生成文件或抛出异常。您甚至确认没有满足抛出异常的条件,例如:您正在替换字符串并且demo1目录存在。请将此内容重写为新的空文件并运行。
如果它仍然表现相同,除非我遗漏了某些东西,否则这可能是一个错误。在这种情况下,将此行添加到代码并发布输出:
System.out.println(System.getProperty("java.vendor")+" "+System.getProperty("java.version"));
从路径上看,我会说你使用的是Win 7,对吗?什么版本?
答案 1 :(得分:-2)
然后这意味着您的目录中已有一个文件