1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Weird File Output behavior in java

  1. Nov 16, 2011 #1
    1. The problem statement, all variables and given/known data
    I've implemented RSA and just need to print some stats and write to files.


    2. Relevant equations
    My solution works fine when I provide an input file, however, if I let it read from standard input there is no output written to either of my output files. Reading works regardless. I really have no idea what is going on here. I'm not really familiar with java IO so i figure I must be doing something wrong here.


    3. The attempt at a solution

    Code (Text):
    public static void main(String args[]) {
            String message = new String();
            String outFile = "out.txt"; // Default output file.
            // If no arguments are provided then standard input is used to collect input.
            if(args.length == 0) {
                System.out.println("No input file provided, using standard input: ");
                Scanner stdIn = new Scanner(System.in);
                message = stdIn.nextLine();
            }
            // If one or 2 arguments are provided the first is assumed to be an input text file.
            if(args.length == 1 || args.length == 2) {
                FileInputStream fin;       
                String line;
                try {
                    // Opening file
                    System.out.println("Opening file " + args[0] + " ...");
                    fin = new FileInputStream (args[0]);
                    BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
                    line = reader.readLine();
                    System.out.println("Reading from file... ");
                    // Getting data from file
                    while(line != null) {
                        message += line;
                        line = reader.readLine();
                    }
                    // Closing file
                    fin.close();
                }
                // Unable to read file, using Standard Input instead.
                catch (IOException e) {
                    System.err.println ("Unable to read from file, \"" + args[0] + "\" , using standard input instead: ");
                    Scanner stdIn = new Scanner(System.in);
                    message = stdIn.nextLine();
                }
            }
            // The second parameter is assumed to be an output text file to store the cipherText output.
            if(args.length == 2) {
                outFile = args[1];
            }
            // Invalid usage, exiting.
            if(args.length > 2) {
                System.out.println("Too many arguments. Usage: RSA [inputFilename] [outputFilename]\nEnd.");
                return;
            }
            // Init RSA
            SecureRandom random = new SecureRandom();
            RSA test = new RSA(NBITS, NBITS, random);
            System.out.println("Checking if computed RSA values are secure...");
            // Check is RSA values are secure
            if(test.isSecure()) {
                System.out.println("RSA values are secure continuing with Encryption...");
                System.out.println("Encrypting " + message.length() + " bytes of data...");
                long startEncrypt = System.currentTimeMillis();
                // Encrypt message
                BigInteger[] out = test.encryptString(message);
                long endEncrypt = System.currentTimeMillis();
                System.out.println("Encryption completed in " + (endEncrypt - startEncrypt) + " ms.");
                //Write CipherText to file.
                try {
                    FileWriter fout;   
                    // Opening file
                    System.out.println("Opening file \"" + outFile + "\" ...");
                    fout = new FileWriter(outFile);
                    BufferedWriter writer = new BufferedWriter(fout);
                   
                    System.out.println("Writing ciphertext to file = \"" + outFile + "\".");
                    // Parsing through ciphertext blocks
                    for(int i = 0; i < out.length; i++) {
                        //System.out.println("Writing: " + out[i].toString());
                        writer.write(out[i].toString());
                    }
                    // Closing file
                    fout.close();  
                    System.out.println("Finished writing to \"" + outFile + "\".");
                }
                // Error opening output file
                catch (IOException e) {
                    System.err.println ("Unable to open file \"" + outFile  + "\"Ciphertext will not be written.");
                }
                System.out.println("Decrypting " + message.length() + " bytes of data...");
                long startDecrypt = System.currentTimeMillis();
                // Decrypt message
                String plainText = test.decryptString(out);
                long endDecrypt = System.currentTimeMillis();
                System.out.println("Decryption completed in " + (endDecrypt - startDecrypt) + " ms.");
                // Write plainText to file
                try {
                    FileWriter foutf;  
                    // Opening file
                    System.out.println("Opening file \"" + "plainTextOut.txt" + "\" to ensure encyption/decryption occured without error.");
                    foutf = new FileWriter("plainTextOut.txt");
                    BufferedWriter writer = new BufferedWriter(foutf);
                   
                    System.out.println("Writing plainText to file \"" + "plainTextOut.txt" + "\".");
                    // Write plaintext to file.
                    //System.out.println("Writing: " + plainText);
                    writer.write(plainText);
                    // Closing file
                    foutf.close(); 
                    System.out.println("Finished writing to \"" + "plainTextOut.txt" + "\".");
                }
                // Error opening output file
                catch (IOException e) {
                    System.err.println ("Unable to open file \"" + "plaintTextOut.txt."  + "\"Plaintext will not be written.");
                }
            }
            else
                System.out.println("RSA values are not secure, please try again.");
        }
     
    Probably worth noting that output to files only works on Eclipse. When I tried to run it on my schools linux server output doesn't work even if I provide it an input file..
     
    Last edited: Nov 16, 2011
  2. jcsd
  3. Nov 16, 2011 #2
    Nevermind. I resolved this issue. Apparently you need to call the BufferedWriter's flush() member. Strange that it was working in certain scenarios though.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Weird File Output behavior in java
  1. Python and file output (Replies: 3)

Loading...