2015-09-25 118 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方法或你的代码将不可靠。