This 0ne Pr0grammer
This 0ne Pr0grammer

Reputation: 2662

Question About Copying Text File in Java

so with this piece of code I've written, I was wondering why I am not receiving the type of output I want...

//Method to copy over a file to a new file using a delimiter and breaking up the file if it is more than 15 images
    public static void copyFile(File extractedInfo) 
    {
        try
        {
            //Counter to track the # of images/lines
            int c = 0;

            File inputFile = extractedInfo;
            File outputFile = new File(extractedInfo.getParentFile() + "/Extracted Info " + index2++ + ".txt");

            Scanner reader = new Scanner(inputFile);
            reader.useDelimiter("null(U) ");
            BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));

            //While there is a next line...
            while (reader.hasNextLine())
            {
                //If the document has 15 images, create a new file to write to
                if (c%15 == 0)
                {
                    writer.close();
                outputFile = new File(extractedInfo.getParentFile() + "/Extracted Info " + ((index2++) + 1) + ".txt");
                writer = new BufferedWriter(new FileWriter(outputFile));
                }
                //Else, normally, just write out each individual character from the original file.
                writer.append(reader.next());
                c++;
            }

            reader.close();
            writer.close();
        }
        catch (Exception e)
        {
            e.printStackTrace(System.out);
        }
    }

The original file essentially looks like...

C:\Documents and Settings\workspace\Extracted Items\image2.jpeg;image0;null(U) keyword1, keyword2, keyword3, keyword4,
C:\Documents and Settings\workspace\Extracted Items\image3.jpeg;image1;null(U) keyword1, keyword2, keyword3, keyword4,
C:\Documents and Settings\workspace\Extracted Items\image4.jpeg;image2;null(U) keyword1, keyword2, keyword3, keyword4,
C:\Documents and Settings\workspace\Extracted Items\image5.jpeg;image3;null(U) keyword1, keyword2, keyword3, keyword4,

The problem is, the output file looks exactly the same, but I want everything to be copied EXCEPT the "null(u)" string from the original document. I am just wondering, is my code correct in terms of what I want it to do, and how should I re-work my delimiter to ignore the "null (U)" references in the original file?

Thanks for any offered input.

Upvotes: 1

Views: 217

Answers (3)

This 0ne Pr0grammer
This 0ne Pr0grammer

Reputation: 2662

Just thought I would post this code in case it might be of help to someone else with a similar problem.

  //Method to copy over a file to a new file using a delimiter and breaking up the file if it is more than 15 images
        public static void copyFile(File extractedInfo) 
        {
            try
            {
                //Counter to track the # of images/lines
                int c = 0;

                File inputFile = extractedInfo;
                File outputFile = new File(extractedInfo.getParentFile() + "/Extracted Info " + index2 + ".txt");

                Scanner reader = new Scanner(inputFile);
                reader.useDelimiter("null\\(U\\) ");
                BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));

                //While there is a next line...
                while (reader.hasNextLine())
                {
                    //If the document has 15 images, create a new file to write to
                    if (c%15 == 0)
                    {
                        writer.close();
                        outputFile = new File(extractedInfo.getParentFile() + "/Extracted Info " + index2++ + ".txt");
                        writer = new BufferedWriter(new FileWriter(outputFile));

                        writer.append(reader.next());
                        c++;
                    }
                    else
                    {
                        //Else, normally, just write out each individual character from the original file.
                        writer.append(reader.next());
                        c++;
                    }
                }

                reader.close();
                writer.close();
            }
            catch (Exception e)
            {
                e.printStackTrace(System.out);
            }
        }

Upvotes: 0

ring bearer
ring bearer

Reputation: 20783

I am not yet sure what exactly you want to do, but the line

        writer.append(reader.next());

Seems to have a flaw. The writer may still have reference to original outputFile instead of the new file.

So, you may have to do:

               if (c%15 == 0)
                {
                    outputFile = new File(extractedInfo.getParentFile() + "/Extracted Info " + ((index2++) + 1) + ".txt");
                    writer = new BufferedWriter(new FileWriter(outputFile));
                }

Upvotes: 1

pyroscope
pyroscope

Reputation: 4158

Changing outputFile within the loop has no effect on writer, you also need to re-create that in the same if (add a second line after the re-assign); and close the old writer before you open the new one.

Upvotes: 3

Related Questions