java - Java 中扩展名为 .00x 的文件合并

标签 java file splitter

我目前正在练习拆分和合并文件。我在网上找到了一段由“krishna”编写的带有拆分和合并类的代码。分离器工作起来就像一个魅力,我做了一些修改,让它按照我喜欢的方式工作。

这里有一个问题:我希望合并类打开拆分器生成的 .00x 文件。但它仅限于正好八个 .00x 文件,不多也不少。

如果我能让它读取文件夹中的所有 .00x 文件就好了。我一直在思考一种解决方案,但似乎无法生成一个。我考虑制作一些东西来扫描扩展名为 .00x 的文件数量并基于它进行循环。请帮助我,或者至少给我提示。谢谢你!代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;


public class MergeFile {

private static String FILE_NAME = JOptionPane.showInputDialog("Enter the    file name");
public static void main(String[] args) {
    File ofile = new File(FILE_NAME);
    FileOutputStream fos;
    FileInputStream fis;
    short[] fileBytes;
    int bytesRead = 0;
    List<File> list = new ArrayList<File>();
    list.add(new File(FILE_NAME+".001"));
    list.add(new File(FILE_NAME+".002"));
    list.add(new File(FILE_NAME+".003"));
    list.add(new File(FILE_NAME+".004"));
    list.add(new File(FILE_NAME+".005"));
    list.add(new File(FILE_NAME+".006"));
    list.add(new File(FILE_NAME+".007"));
    list.add(new File(FILE_NAME+".008"));
    try {
        fos = new FileOutputStream(ofile,true);
        for (File file : list) {
            fis = new FileInputStream(file);
            fileBytes = new byte[(int) file.length()];
            bytesRead = fis.read(fileBytes, 0,(int)  file.length());
            assert(bytesRead == fileBytes.length);
            assert(bytesRead == (int) file.length());
            fos.write(fileBytes);
            fos.flush();
            fileBytes = null;
            fis.close();
            fis = null;
        }
        fos.close();
        fos = null;
    }catch (Exception exception){
        exception.printStackTrace();
    }
  }
}

最佳答案

您可以实现 FileFilter 并将其传递给 File.listFiles() 方法,如下所示:

import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.List;


public class Test {
    public static void main(String[] args) {
        final String FILE_NAME = "testfile";
        /* The method listFiles returns all the files in the path 
           (I used "." to select the working directory).
           This method accept a FileFilter as parameter. The file filter
           decides what files to return. It is a simple interface with just
           one method. */
        File[] fileList = new File(".").listFiles(new FileFilter() {

            @Override
            public boolean accept(File pathname) {
                /* Return true to include the file in the list */
                return pathname.getName().startsWith(FILE_NAME);
            }
        });

        List<File> list = Arrays.asList(fileList);

        for (File f: list) {
            System.out.println(f);
        }
    }
}

如果您不喜欢使用匿名类,您可以在自己的文件中将 FileFilter 实现为公共(public)类。

关于java - Java 中扩展名为 .00x 的文件合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34705003/

相关文章:

java - Java Batch (JSR 352) 是 SE JDK 的一部分吗? (BatchRuntime 对于 Joboperator 返回 NULL)

java - 计算列表中每个项目的出现次数

java - 从 URL 调用 servlet

c# - 使用 FileStream.Seek

.NET 拆分器控件显示

java - 用于计算电子邮件地址中转义点的文本中的句子的正则表达式

java - 无法从 java 中读取文件(困难格式)

java - 在 Java 中使用 PrintWriter 创建文件并写入该文件

java - 如何在 apache Camel 中使用 Splitter EIP 将 csv 文件一次拆分为 20 行?

java - 修复了任务执行器的延迟