我目前正在练习拆分和合并文件。我在网上找到了一段由“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/