【问题标题】:Java: PrintWriter object not detectedJava:未检测到 PrintWriter 对象
【发布时间】:2013-05-02 18:49:38
【问题描述】:

我在让 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();


}

【问题讨论】:

    标签: java printwriter


    【解决方案1】:

    try之外声明

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

    【讨论】:

      【解决方案2】:

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

      您需要将其初始化为null,这样您就不会收到“变量可能尚未初始化”错误。然后,当您尝试在 try 块之后使用它时,您需要测试它是否是 null

      【讨论】:

        【解决方案3】:

        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();
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2020-10-17
          • 2018-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多