2015-09-25 169 views
0

我剛開始學習Java,我遇到了下面的問題,我一直在努力奮鬥幾個小時。我想使用PrintWriter來生成一個簡單的文本文件。PrintWriter輸出文件不存在,雖然沒有拋出異常

我沒有得到任何運行時異常,但該文件沒有出現在指定的目錄中。

public class Main { 
    public static void main(String[] args) { 
     try (final PrintWriter writer = new PrintWriter(
       new File("c:\test\new\notes.txt"))) { 
      writer.write("Test note"); 
     } catch (IOException e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

我在做什麼錯?

+0

爲什麼你的標題談論BufferedWriter時,你不使用? –

+0

謝謝,已經更正。 – Martin

回答

1

\表示轉義字符,因此需要爲文字反斜線字符自行轉義。您還可以使用/和Java將解析正確的分隔符爲平臺

try (final PrintWriter writer = new PrintWriter("c:\\test\new\\notes.txt")) { 
+0

就是這樣。謝謝! – Martin

1

writer.write("Test note")後添加writer.flush(),並且使用的Windows路徑雙反斜線(其它答案提示)。

1

由於Reimeus已經說過,\是java中的一個轉義字符。 這意味着包含"\n""\t"的字符串不代表字符串\ n或\ t!

'\n'代表換行符,'\t'代表製表符!

爲了更好地理解,下面的代碼:

System.out.println("c:\test\new\notes.txt"); 

不會打印c:\test\new\notes.txt到控制檯,它將打印

c: est 
ew 
otes.txt 

控制檯!

爲了能夠在字符串中寫入反斜槓,您需要使用'\\'

0

我看到你的問題具有2個部分:

  1. 爲什麼沒有代碼工作?
  2. 爲什麼沒有拋出異常?

第一個問題已經得到解答,但我認爲第二個問題的答案至少同樣重要,因爲如果在寫入文件時出現任何問題,您的當前代碼仍然會默默失敗。

從爲PrintWriter的(http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html)的文檔:

方法在這個類不會拋出I/O異常,儘管它的一些 構造的可能。客戶可以通過調用checkError()來查詢是否發生了錯誤 。

因此,重要的是你叫checkerror()調用一個PrintWriter方法或你的代碼將不可靠。