使用 运行 数字命名文件 outputStream

Name file outputStream with a running Number

我正在沿线 END OF STATEMENT 拆分大文件并写入新文件。我需要用 运行 编号命名文件,即 Statement1、Statement2...。这是我所拥有的:

String[] filenames1 = statements.list(only);//only is filenamefilter
        int count;
        for (int k = 0; k < filenames1.length; k++) {
            try {
                FileInputStream fs = new FileInputStream("C:/statements/" + filenames1[k]);
                System.out.println(filenames1[k]);
                BufferedReader br = new BufferedReader(new InputStreamReader(fs));
                count = 0;
                FileOutputStream fos = new FileOutputStream("C:/ABC Statements/Statement" + count + ".RPT");
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
                while ((lines = br.readLine()) != null) {
                    String mine = lines.trim();
                    if (mine.startsWith("********END OF STATEMENT********")) {
                        bw.close();
                        fos.close();
                        count++;
                        fos = new FileOutputStream("C:/ABC Statements/Statement" + count + ".RPT");
                        bw = new BufferedWriter(new OutputStreamWriter(fos));
                        continue;
                    }
                    if (mine.isEmpty()) {
                        continue;
                    }
                    bw.write(lines);
                    bw.newLine();
                    bw.flush();
                }

                fs.close();
                br.close();
                fos.close();
                bw.close();
            } catch (Exception e) {
                System.out.println("Exception: " + e);
            }
        }

我只收到一个带有 Statement0 的文件,这意味着名称正在被覆盖。 count++

我到底做错了什么

您应该为输出文件附加一个标识符,以了解它们与哪个源文件相关,并防止覆盖。

例如:

String srcPrefix = filenames1[k].substring(0, filenames1[k].lastIndexOf('.'));

String destFilePath = "C:/ABC Statements/Statement" + "_" + srcPrefix  + "_" + count + ".RPT";

我真的明白了。在 for 循环之外初始化计数以某种方式解决了它。

String[] filenames1 = statements.list(only);//only is filenamefilter
        int count = 0;
        for (int k = 0; k < filenames1.length; k++) {
            try {
                FileInputStream fs = new FileInputStream("C:/statements/" + filenames1[k]);
                System.out.println(filenames1[k]);
                BufferedReader br = new BufferedReader(new InputStreamReader(fs));
                FileOutputStream fos = new FileOutputStream("C:/ABC Statements/Statement" + count + ".RPT");
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
                while ((lines = br.readLine()) != null) {
                    String mine = lines.trim();
                    if (mine.startsWith("********END OF STATEMENT********")) {
                        bw.close();
                        fos.close();
                        count++;
                        fos = new FileOutputStream("C:/ABC Statements/Statement" + count + ".RPT");
                        bw = new BufferedWriter(new OutputStreamWriter(fos));
                        continue;
                    }
                    if (mine.isEmpty()) {
                        continue;
                    }
                    bw.write(lines);
                    bw.newLine();
                    bw.flush();
                }

                fs.close();
                br.close();
                fos.close();
                bw.close();
            } catch (Exception e) {
                System.out.println("Exception: " + e);
            }
        }