2009-08-28 25 views
1

我按照Java網站(http://java.sun.com/docs/books/tutorial/essential/io/file.html#createStream)的說明使用IO流創建或寫入文件。然而,它所提供的代碼似乎在多個地方被打破:Java - 使用IO流打開現有文件或創建一個(如果不存在)

import static java.nio.file.StandardOpenOption.*; 

Path logfile = ...; 

//Convert the string to a byte array. 
String s = ...; 
byte data[] = s.getBytes(); 

OutputStream out = null; 
try { 
    out = new BufferedOutputStream(logfile.newOutputStream(CREATE, APPEND)); 
    ... 
    out.write(data, 0, data.length); 
} catch (IOException x) { 
    System.err.println(x); 
} finally { 
    if (out != null) { 
     out.flush(); 
     out.close(); 
    } 
} 

例如,Eclipse的崩潰對進口和使用Path類,對於初學者。但是,本教程似乎正好提供了我想要做的事情 - 如果文件存在(覆蓋)或創建文件(如果文件不存在),我想寫入該文件,最後,我將使用輸出流(其中在這裏使用.newOutputStream()方法創建)。所以用輸出流創建/寫作看起來可能是一個候選人。有誰知道如何解決上述問題,以便它可以工作,或者更好的方式來做我想做的事情?

回答

2

這個例子似乎是使用不的Sun Java的一部分6.

Path類和包java.nio.file是會在太陽JDK 7注添加了鏈接的API以外的API Path指向文檔OpenJDK(Sun的Java開源開發版)的API文檔。

所以,如果你使用的是普通的Sun Java 6

你不能使用這些API閱讀警告上the start page of the tutorial

文件I/O(NIO.2特色)

本節正在更新,以反映即將發佈的JDK7的功能和約定。您可以從java.net下載當前的JDK7快照。我們已經發布了這個初步版本,以便您現在可以獲得最新的信息,所以您可以告訴我們有關本教程的錯誤,遺漏或改進。

在Sun Java 6中,您可以使用FileOutputStream

FileOutputStream out = new FileOutputStream("filename.xyz"); 
out.write(data, 0, data.length); 

注:如果文件不存在,或者如果它存在覆蓋現有文件會自動創建一個新的文件進行寫入文本文件(什麼是你似乎什麼想做的事情),使用Writer(例如FileWriter),而不是直接使用OutputStreamWriter將負責使用字符編碼轉換文本。

見什麼Java SE 6中

+0

的可用信息的Java SE 6 API Documentation(包java.io尤其是文檔),你可以建議另一種方式爲我做什麼,我想沒有這些API做什麼? – sepiroth

+0

JDK 6是Sun Java 6的開發工具包。JDK 7將成爲Sun Java的下一個發行版,將於2010年3月發佈。 – Jesper

相關問題