Можно ли использовать один и тот же файл FileWriter и записывать в него несколькими способами? - PullRequest
0 голосов
/ 26 марта 2019

Я беру входной файл и выходной файл от пользователя и пытаюсь записать в выходной файл метод main и towerOfHanoiMoves. Я пытался передать выходную переменную в качестве параметра методу towerOfHanoiMoves, но получал ошибку.

Ошибка, которую я получаю:

 Exception in thread "main" java.lang.Error: Unresolved compilation problem: Unhandled exception type IOException 
   at TowerofHanoiRecursive.towerOfHanoiMoves(TowerofHanoiRecursive.java:72)
   at TowerofHanoiRecursive.main(TowerofHanoiRecursive.java:41)

Есть ли способ заставить эту работу, где я могу записать в один и тот же выходной файл из двух отдельных методов?

Я пытался использовать PrintWriter, но это дало мне то же самое. Я также попытался очистить и закрыть outStream в методе towerOfHanoiMoves, но это тоже не сработало. Я также импортировал все необходимые файлы java.io, но по какой-то причине они здесь не отображаются.

public class TowerofHanoiRecursive{


  public static void main(String[] args) throws IOException, EmptyFile,                                      
          FileNotFoundException{
    int n; //number of disks

    String rodLeft = "A", rodRight = "C", rodMiddle = "B";
            FileReader inputStream = null;
            FileWriter outputStream = null;
            BufferedReader str = null;  

   try {
        outputStream = new FileWriter(args[1]); // output file
        inputStream = new FileReader(args[0]);  // input file
            str = new BufferedReader(inputStream);  
            String nextLine; 
            File newFile = new File(args[0]);

     if (newFile.length()==0) { //Tests if input file is empty
       //if file is empty, the EmptyFile exception will be thrown
       throw new EmptyFile("Input file is empty");

       }

     while ((nextLine = str.readLine()) != null) {
        outputStream.write("----------------------------------------"
                + "------------------------\n");
        outputStream.write("Number of Disks in Starting Tower = " 
                + nextLine);
         n = Integer.parseInt(nextLine);

         towerOfHanoiMoves(n, rodLeft, rodRight, rodMiddle, 
              outputStream);

     }

   }catch (FileNotFoundException e) {
        outputStream.write("Input file not found.);
        outputStream.flush(); 
        if (outputStream != null) outputStream.close();

   }catch (EmptyFile e) {                               
        outputStream.write(e.getMessage());
        outputStream.flush();   
        if (inputStream != null) inputStream.close();
        if (outputStream != null) outputStream.close();
        str.close();
   } finally { 
        outputStream.write("");
        outputStream.write("\n\nSuccess!);
        outputStream.flush();

        if (inputStream != null) inputStream.close();
        if (outputStream != null) outputStream.close();
        str.close();
    }

}


  public static void towerOfHanoiMoves(int n, String leftRod, String 
            rightRod, String MidRod, FileWriter outStream) {

    if (n == 1) {
       outStream.write("Move disk 1 from ....");
    }
  }
}

1 Ответ

1 голос
/ 26 марта 2019

Особой ошибкой является то, что метод write() может выдать IOException.В результате это исключение должно быть перехвачено или объявлено.Таким образом, можно изменить towerOfHannoiMoves, добавив IOException

    public static void towerOfHanoiMoves(int n,
        String leftRod,
        String rightRod,
        String MidRod,
        FileWriter outStream)
     throws IOException

Еще одно замечание: в опубликованном коде отсутствуют некоторые закрывающие кавычки.Например,

outputStream.write("Input file not found.);
...