扩展名为.00x的Java文件合并
我目前正在练习分割和合并文件。我在网上发现了一段由“克里希纳”编写的代码,其中包含拆分和合并类。拆分器工作起来就像一个符咒,我做了一些修改,使它以我喜欢的方式工作 问题是:我希望合并类打开拆分器生成的.00x文件。但它仅限于八个.00x文件,不多不少 如果我能让它读取文件夹中的所有.00x文件就好了。我一直在想一个解决方案,但我似乎无法想出一个。我想做一些东西来扫描扩展名为.00x的文件的数量,并在此基础上创建一个循环。请帮助我,或者至少给我一些提示。非常感谢。守则如下:扩展名为.00x的Java文件合并,java,file,splitter,Java,File,Splitter,我目前正在练习分割和合并文件。我在网上发现了一段由“克里希纳”编写的代码,其中包含拆分和合并类。拆分器工作起来就像一个符咒,我做了一些修改,使它以我喜欢的方式工作 问题是:我希望合并类打开拆分器生成的.00x文件。但它仅限于八个.00x文件,不多不少 如果我能让它读取文件夹中的所有.00x文件就好了。我一直在想一个解决方案,但我似乎无法想出一个。我想做一些东西来扫描扩展名为.00x的文件的数量,并在此基础上创建一个循环。请帮助我,或者至少给我一些提示。非常感谢。守则如下: import java
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();
}
}
}
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JOptionPane;
公共类合并文件{
私有静态字符串文件_NAME=JOptionPane.showInputDialog(“输入文件名”);
公共静态void main(字符串[]args){
文件名=新文件(文件名);
文件输出流;
文件输入流fis;
短[]个文件字节;
int字节读取=0;
列表=新的ArrayList();
添加(新文件(文件名+“.001”);
添加(新文件(文件名+“.002”);
添加(新文件(文件名+“.003”);
添加(新文件(文件名+“.004”);
添加(新文件(文件名+“.005”);
添加(新文件(文件名+“.006”);
添加(新文件(文件名+“.007”);
添加(新文件(文件名+“.008”);
试一试{
fos=新文件输出流(ofile,true);
用于(文件:列表){
fis=新文件输入流(文件);
fileBytes=新字节[(int)file.length()];
bytesRead=fis.read(fileBytes,0,(int)file.length());
断言(bytesRead==fileBytes.length);
断言(bytesRead==(int)file.length());
fos.写入(文件字节);
fos.flush();
fileBytes=null;
fis.close();
fis=null;
}
fos.close();
fos=null;
}捕获(异常){
异常。printStackTrace();
}
}
}
您可以实现一个文件过滤器,并将其传递给方法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);
}
}
}
导入java.io.File;
导入java.io.FileFilter;
导入java.util.array;
导入java.util.List;
公开课考试{
公共静态void main(字符串[]args){
最终字符串文件\u NAME=“testfile”;
/*方法listFiles返回路径中的所有文件
(我用“.”来选择工作目录)。
此方法接受FileFilter作为参数
决定返回哪些文件。这是一个简单的界面,只需
一种方法*/
File[]fileList=新文件(“.”)。listFiles(新文件过滤器(){
@凌驾
公共布尔接受(文件路径名){
/*返回true以将文件包括在列表中*/
返回pathname.getName().startsWith(文件名);
}
});
List List=Arrays.asList(fileList);
用于(文件f:列表){
系统输出打印ln(f);
}
}
}
如果您不喜欢使用匿名类,您可以在自己的文件中将FileFilter实现为公共类。您可以实现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);
}
}
}
导入java.io.File;
导入java.io.FileFilter;
导入java.util.array;
导入java.util.List;
公开课考试{
公共静态void main(字符串[]args){
最终字符串文件\u NAME=“testfile”;
/*方法listFiles返回路径中的所有文件
(我用“.”来选择工作目录)。
此方法接受FileFilter作为参数
决定返回哪些文件。这是一个简单的界面,只需
一种方法*/
File[]fileList=新文件(“.”)。listFiles(新文件过滤器(){
@凌驾
公共布尔接受(文件路径名){
/*返回true以将文件包括在列表中*/
返回pathname.getName().startsWith(文件名);
}
});
List List=Arrays.asList(fileList);
用于(文件f:列表){
系统输出打印ln(f);
}
}
}
如果您不喜欢使用匿名类,您可以在自己的文件中将FileFilter实现为一个公共类。如果您使用的是Java 8,那么您可以非常轻松地使用。正在获取文件列表,以文件名开始,以.001、.002、.003结尾。。。应该这样做:
Path path = Paths.get(FILE_NAME);
Pattern pattern = Pattern.compile(Pattern.quote(path.getFileName().toString()) + "\\.\\d{3}");
List<File> list = Files.list(path.getParent())
.filter(f -> pattern.matcher(f.getFileName().toString()).matches())
.map(Path::toFile)
.collect(Collectors.toList());
Path Path=Path.get(文件名);
Pattern=Pattern.compile(Pattern.quote(path.getFileName().toString())+“\\.\\d{3}”);
List List=Files.List(path.getParent())
.filter(f->pattern.matcher(f.getFileName().toString()).matches())
.map(路径::toFile)
.collect(Collectors.toList());
这只是我的想法,我没有测试它,因为我没有.00x文件。如果你使用的是Java 8,那么你可以很容易地使用它。正在获取文件列表,以文件名开始,以.001、.002、.003结尾。。。应该这样做:
Path path = Paths.get(FILE_NAME);
Pattern pattern = Pattern.compile(Pattern.quote(path.getFileName().toString()) + "\\.\\d{3}");
List<File> list = Files.list(path.getParent())
.filter(f -> pattern.matcher(f.getFileName().toString()).matches())
.map(Path::toFile)
.collect(Collectors.toList());
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;
public class ListFiles {
private static final String BASE_DIR = "<your directory>";
private static final String FILE_EXT = ".*\\.[0-9]{3,3}";
private class FileFilter implements FilenameFilter {
private String ext;
public FileFilter(String ext) {
this.ext = ext;
}
public boolean accept(File dir, String name) {
return Pattern.matches(ext, name) ? true : false;
}
}
public static void main(String args[]) {
System.out.println(Arrays.toString(new ListFiles().listFile(BASE_DIR, FILE_EXT)));
}
public String[] listFile(String folder, String ext) {
File dir = new File(folder);
String[] list = dir.list(new FileFilter(ext));
return list;
}
Path Path=Path.get(文件名);
Pattern=Pattern.compile(Pattern.quote(path.getFileName().toString())+“\\.\\d{3}”);
List List=Files.List(path.getParent())
.filter(f->pattern.matcher(f.getFileName().toString()).matches())
.map(路径::toFile)
.collect(Collectors.toList());
这只是我的想法,我没有测试它,因为我没有.00x文件。import java.io.File;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;
public class ListFiles {
private static final String BASE_DIR = "<your directory>";
private static final String FILE_EXT = ".*\\.[0-9]{3,3}";
private class FileFilter implements FilenameFilter {
private String ext;
public FileFilter(String ext) {
this.ext = ext;
}
public boolean accept(File dir, String name) {
return Pattern.matches(ext, name) ? true : false;
}
}
public static void main(String args[]) {
System.out.println(Arrays.toString(new ListFiles().listFile(BASE_DIR, FILE_EXT)));
}
public String[] listFile(String folder, String ext) {
File dir = new File(folder);
String[] list = dir.list(new FileFilter(ext));
return list;
}
导入java.io.FilenameFilter;
导入java.util.array;
导入java.util.regex.Pattern;
公共类列表文件{
私有静态最终字符串