1

我在让 java 识别我的 PrintWriter 对象“out”时遇到了一些麻烦。我不确定问题是什么。

public void storeInput(String fileName)
{
    String folderName = "C:/temper/testy/";

    File filetest = new File(folderName, fileName);

    System.out.println("ENTER TEXT!!!!!");
    String input = sc.nextLine();

    try {
        PrintWriter out = new PrintWriter(
                new BufferedWriter(
                new FileWriter(filetest)));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    out.println(filetest);

    out.close();


}
4

3 回答 3

2

声明之外try

PrintWriter out = null;
try {
      out = new PrintWriter(
                new BufferedWriter(
                new FileWriter(filetest)));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
于 2013-05-02T18:50:47.017 回答
2

变量的out范围目前仅在try块的范围内。在块之前声明它,try以便在块结束后可用。

您需要将其初始化,null以免出现“变量可能尚未初始化”错误。然后你需要测试它是否是null在尝试使用它时越过try障碍。

于 2013-05-02T18:50:47.860 回答
0

PrintWriter out仅在try块内可见。从外部访问它会导致编译错误。

您可以将它的声明移到try块之外,以便它在您的情况下在函数的孔体中可见,storeInput但是您必须检查是否在语句之前初始化了 ist

out.println(filetest);
out.close();

或者更好的是,您将这些拖曳语句移动到try块的一侧,以便在没有异常时out始终初始化。

因为close最好将它放在一个finally块中,这样无论发生什么异常,你总是释放资源。

public void storeInput(String fileName)
{
    String folderName = "C:/temper/testy/";

    File filetest = new File(folderName, fileName);

    System.out.println("ENTER TEXT!!!!!");
    String input = sc.nextLine();
    PrintWriter out = null;
    try {
        out = new PrintWriter(
                new BufferedWriter(
                        new FileWriter(filetest)));

        out.println(filetest);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        if(out != null) {
            out.close();
        }
    }
}
于 2013-05-02T19:04:08.723 回答