buffered writer now writing to file

荒凉一梦 提交于 2019-12-08 04:07:36

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!