BYTES逐行打破大文件:java

时间:2015-05-04 00:06:10

标签: java file byte

我正在尝试将大文件分成单独的较小文件。这个文件基本上是新行上的每个数字列表。我使用下面的代码根据每个20字节的字节分隔文件。我面临的问题是数字不完整。例如,如果原始文件是

123
2456
3456

我得到的结果是

file1     file2          CorrectFile1    CorrectFile2
1                             123           3456
2456      3                   2456
456       23

这只是一个例子。我需要的是由correctfile表示。我知道这是可能的,因为我使用字节打破它。有什么方法可以实现这一点(注意不能使用数组或任何东西,因为我必须通过网络传输字节)

 public static void splitFile(File f) throws IOException {
            System.out.println("entering split file");
            int splitCounter = 1;

            int sizeOfFiles = 20; // 200kb
            byte[] buffer = new byte[sizeOfFiles];

            try (BufferedInputStream bis = new BufferedInputStream(
                    new FileInputStream(f))) {
                //String name = this.getFileNameWithoutExtension(f.getName());

                int tmp = 0; // chunk size
                while ((tmp = bis.read(buffer)) > 0) {
                    //File newFile = new File("f.txt");
                    String fileName = String.format("%s%03d.txt", "job",splitCounter++);
                    File newFile = new File(f.getParent(),fileName);
                    try (FileOutputStream out = new FileOutputStream(newFile)) {
                        out.write(buffer, 0, tmp);
                        //this.tracker.jobList.add(fileName);
                        //this.parentString = f.getParent();
                    }
                }
            }
        }

2 个答案:

答案 0 :(得分:0)

你可以试试StringTokenizer

字符串tokenizer类允许应用程序将字符串分解为标记。标记化方法比StreamTokenizer类使用的方法简单得多。

答案 1 :(得分:0)

使用Apache FileSplit Api。

执行此操作的最佳方法

经过测试和优化,非常快。