[英]FileOutputStream does not create file
我實際上檢查了與此相關的其他帖子,但找不到我的問題的任何答案。 因此,必須重新創建此代碼:
不能使用以下代碼在給定位置創建文件:
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! 有什么我想念的嗎?
您可以這樣重寫代碼:
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方法。
try
塊中的dob.flush()
被注釋掉了,因為finally
塊中的dob.close()
行刷新了流。 同樣,它會釋放上面apidoc引用中所述的系統資源(例如“關閉文件”)。 使用finally塊是一個好習慣: try塊退出時, finally塊總是執行 。 這樣可以確保即使發生意外異常,也可以執行finally塊。 但是,最后,它不僅對異常處理有用,它還使程序員避免因返回,繼續或中斷而意外地跳過清理代碼。 即使在沒有例外的情況下,將清除代碼放在finally塊中始終是一個好習慣。
創建文件輸出流以寫入由指定File對象表示的文件。 創建一個新的FileDescriptor對象來表示此文件連接。 首先,如果有安全管理器,則以文件參數表示的路徑作為參數來調用其checkWrite方法。
如果文件存在但是目錄而不是常規文件,則不存在但無法創建,或者由於任何其他原因而無法打開文件,則拋出FileNotFoundException 。
FileDescriptor在哪里:
文件描述符類的實例充當基礎機器特定結構的不透明句柄,這些結構表示打開的文件,打開的套接字或其他字節源或宿。 文件描述符的主要實際用途是創建一個FileInputStream或FileOutputStream來包含它。
應用程序不應創建自己的文件描述符。
此代碼應生成文件或引發異常。 您甚至已經確認不滿足任何引發異常的條件,例如,您要替換字符串並且demo1目錄存在。 請將該文件重寫為一個新的空文件並運行。
如果它仍然表現相同,除非我錯過了一些東西,否則這可能是一個錯誤。 在這種情況下,請將以下行添加到代碼中並發布輸出:
System.out.println(System.getProperty("java.vendor")+" "+System.getProperty("java.version"));
從路徑上來看,我會說您正在使用Win 7,對嗎? 什么版本的?
這意味着您的目錄中已經有一個文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.