Переменная объекта PrintWriter не может преобразоваться в тип при использовании в попытке с ресурсами - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь создать новый объект PrintWriter в блоке try с ресурсами, как показано ниже, но выдает ошибку: 1001 *:

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

    }

EDIT:

Причина, по которой я не хотел объявлять объект PrintWriter в блоке try, заключается в том, что я хочу иметь возможность ссылаться на объект outFile в других методах моего класса.

Кажется, что я не могу сделать это с помощью try с ресурсами, поэтому я создал его в обычном блоке 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 голосов
/ 05 ноября 2018

Вместо того, чтобы делать все в конструкторе, я продемонстрирую предпочтительный способ использования 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");
}
...