缓冲编写器现在写入文件

有人可以指出我为什么不写入.txt文件的正确方向?

这是我打印时得到的输出。 我无法弄清楚代码中的错误在哪里。 从输出中可以看出。 它看起来像第一个循环一切正常。 我的第一个问题是为什么它不将“val 5”写入.txt文件? 我的第二个问题是为什么它不会在第二个矩阵之后再次出现?

我是一名学生,并希望对我的代码提出任何反馈,以便做得更好。 请尽可能建议。

输入:

1 5 3 3 -2 4 -1 5 2 -3 6 4 

打印输出:

 Size:1 insert 5 len: 1 size2 1 val5 Size:3 insert 3 insert -2 insert 4 insert -1 insert 5 insert 2 insert -3 insert 6 insert 4 len: 9 

.txt文件的输出:

 Matrix read: --------------------------------------- Matrix read: --------------------------------------- 

代码如下:

 import java.util.*; import java.lang.*; import java.io.*; public class Driver{ public static void main(String[] args) { //initialize variables String filepath; BufferedWriter bw = null; String toRead = ""; CustomList[] arrayForList; CustomList listToBuild; 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"); //read user input Scanner user_input = new Scanner(System.in); filepath = user_input.next(); //print out the file path for user to confirm the //correct file path was entered System.out.println("Filepath read: " + filepath); System.out.println(""); //finds the spot of the "." in .txt int extCounter = filepath.indexOf('.'); String Output_Path = filepath.substring(0, extCounter); //close the scanner user_input.close(); //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("_Output5_File.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(); } //initialize array to hold strings String [] arrayToHoldInts = new String [100]; //sets up filewriter to write output FileWriter fw = new FileWriter(file); bw = new BufferedWriter(fw); // open input stream test.txt for reading purpose. BufferedReader br = new BufferedReader(new FileReader(filepath)); String input = ""; input = br.readLine(); int sizeOfArrayToStore = 0; while (input != null) { //below 2 lines get the size of the matrix sizeOfArrayToStore = Integer.parseInt(input); System.out.println("Size:" + sizeOfArrayToStore); //reads the next line after getting the size input = br.readLine(); //checks for blanks and continues on error if (input.length() == 0){ continue; } String [] stringSplitterForBR = null; arrayForList = new CustomList [sizeOfArrayToStore * sizeOfArrayToStore]; //for loop to add ints parse the string that the //bufferred reader reads in. there is another nested //for loop to add each int that is parsed into a new //node for to build the list for (int i = 0; i < sizeOfArrayToStore; i++){ listToBuild = new CustomList(); stringSplitterForBR = input.split(" "); int tracker = 0; int valueToInsert = 0; //for loop parses the ints and adds them into nodes //from the CustomList class for(int j = 0; j < sizeOfArrayToStore; j++) { valueToInsert = Integer.parseInt(stringSplitterForBR[tracker]); System.out.println("insert " + valueToInsert); listToBuild.addToList(valueToInsert); tracker++; } arrayForList[i] = listToBuild; input = br.readLine(); } //Compute the deterimant using the same formula from //Lab2 int length = arrayForList.length; System.out.println("len: " + length); //print out the results to a .txt file bw.write("Matrix read: "); bw.newLine(); bw.write("------------------" + "---------------------"); bw.newLine(); bw.flush(); int size2 = 0; int valueToPrint; for (int x = 0; x < length; x++){ listToBuild = arrayForList[x]; size2 = listToBuild.sizeOfList(); System.out.println("size2 " + size2); for (int y = 0; y < size2; y++) { valueToPrint = listToBuild.ValueOfNode(y); bw.write(valueToPrint); System.out.println("val" + valueToPrint); bw.flush(); } bw.newLine(); } } bw.close(); } catch (Exception e) { e.printStackTrace(); } } } 

BufferedWriter上的write方法与PrintStream上的println方法具有非常不同的语义( System.out是一个PrintStream )。 例如,您可以使用int值作为参数调用println ,它会将其作为数字打印,但write方法将其解释为单个字符的unicode,并且只会在代码中写入一个字符,用于“ val 5“,这是数字值为5的unicode字符。

解决方案:用PrintWriter替换BufferedWriter ,并在需要打印时使用PrintWriter.println方法 – 它与System.out上的println方法具有相同的语义。