gpt4 book ai didi

java - 如何使用 Java 按顺序连接顺序文件?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:47:53 25 4
gpt4 key购买 nike

我有一个目录,其中包含按顺序编号的日志文件和一些用于分析的 Excel 电子表格。日志文件总是从零开始按顺序编号,但它们的数量可能会有所不同。我正在尝试连接日志文件,按照它们被创建到一个文本文件中的顺序,这将是所有日志文件的连接。

例如,日志文件 foo0.log、foo1.log、foo2.log 将通过在 foo0 之后附加 foo1 和在 foo1 之后附加 foo2 来输出到 concatenatedfoo.log。

我需要对给定目录中扩展名为 *.log 的所有文件进行计数,使用计数来驱动一个 for 循环,该循环还生成用于连接的文件名。我很难找到一种方法来使用过滤器对文件进行计数……似乎没有一个关于文件操作的 Java Turtorials 适合这种情况,但我确定我遗漏了一些东西。这种方法有意义吗?或者有更简单的方法吗?

int numDocs = [number of *.log docs in directory];
//
for (int i = 0; i <= numberOfFiles; i++) {
fileNumber = Integer.toString(i);
try
{
FileInputStream inputStream = new FileInputStream("\\\\Path\\to\\file\\foo" + fileNumber + ".log");
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
try
{
BufferedWriter metadataOutputData = new BufferedWriter(new FileWriter("\\\\Path\\to\\file\\fooconcat.log").append());
metadataOutputData.close();
}
//
catch (IOException e) // catch IO exception writing final output
{
System.err.println("Exception: ");
System.out.println("Exception: "+ e.getMessage().getClass().getName());
e.printStackTrace();
}
catch (Exception e) // catch IO exception reading input file
{
System.err.println("Exception: ");
System.out.println("Exception: "+ e.getMessage().getClass().getName());
e.printStackTrace();
}
}

最佳答案

怎么样

public static void main(String[] args){

final int BUFFERSIZE = 1024 << 8;
File baseDir = new File("C:\\path\\logs\\");

// Get the simple names of the files ("foo.log" not "/path/logs/foo.log")
String[] fileNames = baseDir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".log");
}
});

// Sort the names
Arrays.sort(fileNames);

// Create the output file
File output = new File(baseDir.getAbsolutePath() + File.separatorChar + "MERGED.log");
try{
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(output), BUFFERSIZE);
byte[] bytes = new byte[BUFFERSIZE];
int bytesRead;
final byte[] newLine = "\n".getBytes(); // use to separate contents

for(String s : fileNames){
// get the full path to read from
String fullName = baseDir.getAbsolutePath() + File.separatorChar + s;
BufferedInputStream in = new BufferedInputStream(new FileInputStream(fullName),BUFFERSIZE);
while((bytesRead = in.read(bytes,0,bytes.length)) != -1){
out.write(bytes, 0, bytesRead);
}
// close input file and ignore any issue with closing it
try{in.close();}catch(IOException e){}
out.write(newLine); // seperation
}

out.close();
}catch(Exception e){
throw new RuntimeException(e);
}
}

此代码确实假定“顺序命名”将被零填充,以便它们将按字典顺序 (?? sp) 正确排序。即文件将是

  • 0001.log(或 blah0001.log,或 0001blah.log 等)
  • 0002.log
  • ....
  • 0010.log

不是

  • 1.日志
  • 2.日志
  • ...
  • 10.日志

后一种模式无法根据我给出的代码正确排序。

关于java - 如何使用 Java 按顺序连接顺序文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19665879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com