2016-07-15 147 views
-1

以下代碼適用於我一直在研究的項目。輸出必須是.txt文件。當while循環運行多次時,我無法讓緩衝寫入器寫入。我嘗試過故障排除和測試,但無法使其正常工作。如果我做system.out.prints,輸出是正確的,所以我認爲問題在於緩衝寫入器。我目前沒有bw.close(),但我曾嘗試將它放在多個位置,但仍然無法使用。 bw.write(「你好」)只是我試圖解決問題。我的bw.flush()在錯誤的位置?Buffered Writer寫入.txt文件

我的第二個問題是,這是將輸出寫入.txt文件的最佳方法嗎?我很樂於接受新的方法,並會喜歡一些建議來幫助擴大我對java的知識。

public class Driver{ 


public static void main(String[] args) { 

    String filepath; 
    BufferedWriter bw = null; 

    // TODO Auto-generated method stub 
    try { 
    System.out.println("To find the determinant of a Matrix, please enter the file below!"); 
    System.out.println("Please enter the file path of the txt file:\n"); 


    Scanner user_input = new Scanner(System.in); 
    filepath = user_input.next(); 

    System.out.println("Filepath read: " + filepath); 
    System.out.println(""); 
    int extCounter = filepath.indexOf('.'); 
    String Output_Path = filepath.substring(0, extCounter); 

    // Read input file 
    Scanner input = new Scanner(new File(filepath)); 

    //while loop to read in the text file 
    while (input.hasNextInt()) { 

     //find the size given by the first int 
     //size is then used to allocate the array 
     //to the correct size 
     int size = input.nextInt(); 
     int[][] a = new int[size][size]; 

     for (int i = 0; i < size; i++) { 
      for (int j = 0; j < size; j++) { 

       try{ 
       a[i][j] = input.nextInt(); 

       } 
       catch (java.util.NoSuchElementException e) { 
       e.printStackTrace(); 
       } 
      } 
     } 

     //Specify the file name and path here 
     //the below code allows the user to enter one path 
     //and get the output file at the same path 
     //without having to enter it twice 
     String OutFile; 
     OutFile = Output_Path.concat("_Output_File15.txt"); 
     File file = new File(OutFile); 

     /* This logic will make sure that the file 
     * gets created if it is not present at the 
     * specified location*/ 
     if (!file.exists()) { 
      file.createNewFile(); 
     } 

     FileWriter fw = new FileWriter(file); 
     bw = new BufferedWriter(fw); 


     //print out the determinant by 
     //calling the determinant method 
     Deter deterMethod = new Deter(); 
     bw.write("The Determinant is: " 
       + deterMethod.determinant(a) + " ..."); 
     int deterInt = deterMethod.determinant(a); 
     System.out.println(deterInt); 
     bw.write("" + deterInt); 
     bw.write("hello"); 
     bw.write(deterInt); 
     bw.flush(); 
     //deterInt = 0; 
     //print a blank line 
     System.out.println(); 

    } 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
} 





//determinant method 
public class Deter 
{ 
public static int determinant(int matrix [][]) { 

    //initializes the sum at 0 
    int sum = 0; 

    //base case 
    //1 x 1 matrix (x) is det(a) = x 
    if (matrix.length == 1) { 
    return matrix[0][0]; 

    } else { 

    //for loop to cycle through the columns 
    for (int j = 0; j < matrix.length; j++) { 

     //equation to figure out the minor of the array given. 
     //Deletes a row and column as provided by the definition 
     //of a minor 
     int[][] minor = new int[matrix.length - 1] 
       [matrix.length - 1]; 

     //for loop to cycle through the rows 
     for (int row = 1; row < matrix.length; row++) { 
      for (int column = 0; 
       column < matrix.length; column++) { 


       if (column < j) { 
       minor[row - 1][column] = matrix[row][column]; 
       } else if (column > j) { 
       minor[row - 1][column - 1] = matrix[row][column]; 
       } 
      } 
     } 

     //recursive equation to get the 
     //sum to find the determinent 
     sum+=matrix[0][j]*Math.pow(-1,j)*determinant(minor); 
    } 
    } 
    //return the sum to be printed out 
    return sum; 
} 
} 

回答

0

當你創建你的每個循環迭代新FileWriter,該文件將得到重寫,所以無論是移動FileWriter的創建你的循環使用前或使用 它指示構造追加

https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File,%20boolean)

嘗試通過創造更多的方法

E,G,模塊化的代碼

private Scanner getFileScanner() { 

Scanner user_input = new Scanner(System.in); 
String filepath = user_input.next(); 

System.out.println("Filepath read: " + filepath); 
// Read input file 
Scanner input = new Scanner(new File(filepath)); 
return input 
} 
+0

這就是爲什麼我喜歡堆棧溢出。非常感謝@Scary Wombat。經過兩個漫長的夜晚試圖解決這個問題...要回答我的第二個問題是這是實現這個輸出的最好方法嗎? – cfsprod

+0

輸出的方式似乎很好。不過,我會建議通過更多地使用用戶編寫的方法來讓代碼變得更加模塊化。 –

+0

你能否詳細說明一下?我是相當新的,並沒有真正關注你。 – cfsprod