在尝试使用资源时,PrintWriter对象变量无法解析类型

时间:2018-11-05 00:44:44

标签: java try-catch printwriter

我正尝试在带有资源块的try中创建一个新的PrintWriter对象,如下所示,但这给我一个错误,提示outFile cannot be resolved to a type

public class DataSummary {

    PrintWriter outFile;

    public DataSummary(String filePath) {

        // Create new file to print report
        try (outFile = new PrintWriter(filePath)) {

        } catch (FileNotFoundException e) {
            System.out.println("File not found");
            e.printStackTrace();
        }

    }

编辑:

我不想在try块中声明PrintWriter对象的原因是因为我希望能够在类的其他方法中引用outFile对象。

似乎我无法使用资源进行尝试,因此我在正常的try / catch / finally块中创建了它。

正在创建文本文件。但是,当我尝试用另一种方法写入文件时,似乎没有在文本文件test.txt中打印任何内容。

这是为什么?

public class TestWrite {

  PrintWriter outFile;

  public TestWrite(String filePath) {

    // Create new file to print report
    try {
      outFile = new PrintWriter(filePath);
    } catch (FileNotFoundException e) {
      System.out.println("File not found");
      e.printStackTrace();
    } finally {
      outFile.close();
    }
  }

  public void generateReport() {
    outFile.print("Hello world");
    outFile.close();
  }
}

1 个答案:

答案 0 :(得分:1)

我将展示使用try-with-resources并调用另一种方法的首选方法,而不是尝试在构造函数中完成所有操作。即,将 closeable 资源传递给另一种方法。但我强烈建议您将此类资源的开启者用于关闭这些资源。喜欢,

public void writeToFile(String filePath) {
    try (PrintWriter outFile = new PrintWriter(filePath)) {
        generateReport(outFile);
    } catch (FileNotFoundException e) {
        System.out.println("File not found");
        e.printStackTrace();
    }
}

private void generateReport(PrintWriter outFile) {
    outFile.print("Hello world");
}