Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I am trying to modify some lines in text files and when I write that line back again to the file, I end up with a blank file

Tags:

java

This code is reading a bunch of .java files and finding "public [classname]" or "private [classname]" and adding "System.out.println([classname])" to that line.

The problem is When I write that line back in I end up with a blank file

Can anyone see what I am doing wrong?

private static void work(ArrayList<File> fileList) {
    for (int i = 0; i < fileList.size(); i++) {
        replaceLines(fileList.get(i));
    }

}

public static void replaceLines(File file) {
    String path = file.getPath();
    String fileNameLong = file.getName();
    String fileName = null;
    if (fileNameLong.contains(".java")) {
        fileName = fileNameLong.substring(0, file.getName().indexOf("."));
    }
    if (fileName != null && fileName != "") {
        System.out.println(fileName);
        try {
            //prepare reading
            FileInputStream in = new FileInputStream(path);
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(in));
            //prepare writing
             FileWriter fw = new FileWriter(file);
             PrintWriter out = new PrintWriter(fw);

            String strLine;
            while ((strLine = br.readLine()) != null) {
                // Does it contain a public or private constructor?
                boolean containsPrivateCon = strLine.contains("private "
                        + fileName);
                boolean containsPublicCon = strLine.contains("public "
                        + fileName);

                if (containsPrivateCon || containsPublicCon) {
                    int lastIndexOfBrack = strLine.lastIndexOf("{");

                    while (lastIndexOfBrack == -1) {
                        strLine = br.readLine();
                        lastIndexOfBrack = strLine.lastIndexOf("{");
                    }

                    if (lastIndexOfBrack != -1) {
                        String myAddition = "\n System.out.println(\""
                                + fileName + ".java\"); \n";
                        String strLineModified = strLine.substring(0,
                                lastIndexOfBrack + 1)
                                + myAddition
                                + strLine.substring(lastIndexOfBrack + 1);
                        strLine = strLineModified;
                    }
                }
                out.write(strLine);
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }

}
like image 600
code511788465541441 Avatar asked Nov 16 '25 14:11

code511788465541441


1 Answers

If you want to write to the same file you're reading from, you should either write to a copy of the file (different filename) and then rename the output file, or use RandomAccessFile interface to edit a file in-place.

Usually, the first solution will be much easier to implement than the second one; unless the files are huge (which is probably not the case with .java files), there is no real reason to use the second.

like image 144
onon15 Avatar answered Nov 19 '25 09:11

onon15



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!