问题
Could someone please point me in the right direction on why this is not writing to the .txt file?
Here is the output i am getting when I print. I cannot figure out where the error in code is. As you can see from the output. its looks like everything is working correctly for the first loop. My first question is why does it not write the "val 5" to the .txt file? My second question is why does it not go again after the second matrix?
I am a student and would love any feedback on my code to get better. Please suggest as much as possible.
input:
1
5
3
3 -2 4
-1 5 2
-3 6 4
Output when printed:
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
output from .txt file:
Matrix read:
---------------------------------------
Matrix read:
---------------------------------------
Code below:
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();
}
}
}
回答1:
The write
method on BufferedWriter
has very different semantics from the println
method on PrintStream
(System.out
is a PrintStream
). For example, you can call println
with an int
value as an argument and it will print it as a number, but the write
method interprets this as the unicode of a single character and will only write a single character - in your code, for "val 5", that's the unicode character with numeric value 5.
Solution for you: replace BufferedWriter
with PrintWriter
and use the PrintWriter.println
method whenever you want to print - it has the same semantics as the println
method on System.out
.
来源:https://stackoverflow.com/questions/38779757/buffered-writer-now-writing-to-file