簡體   English   中英

FileOutputStream不創建文件

[英]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塊中始終是一個好習慣。

  • FileOutputStream 構造函數在磁盤上創建一個空文件:

創建文件輸出流以寫入由指定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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM