gpt4 book ai didi

java - 搜索目录中的文件并根据公共(public)子字符串将它们配对

转载 作者:行者123 更新时间:2023-12-02 04:12:26 25 4
gpt4 key购买 nike

我一直在尝试为 ImageJ 编写一个解决方案来处理我的图像。

我了解如何获取目录,在其上运行命令等。但是,我遇到了一种情况,我现在需要开始使用某种类型的搜索功能,以便将两个图像在一个完整的目录中配对在一起图像对。

我希望你们能够确认我的方向是正确的,我的想法是正确的。到目前为止,这对我来说还是很难理解,因为我的 Java 经验还不到一个月。由于这个项目直接用于我的研究,我确实有足够的动力来完成它,我只需要一些关于哪些功能对我有用的指导。

我最初考虑使用正则表达式,但我发现当你开始处理大量图像时(特别是使用 imagej,它似乎不能很好地转储数据使用情况,如果这是正确的说法的话)regex is very slow .

这些图像的一般格式是:

  • someString_DAPI_0001.tif
  • someString_GFP_0001.tif
  • someString_DAPI_0002.tif
  • someString_GFP_0002.tif
  • someString_DAPI_0003.tif
  • someString_GFP_0003.tif

它们按字母顺序排列,因此应该能够转到列表中的下一个图像。我只是有点不知道应该使用哪些函数来完成此任务,但我认为我的整体 while 结构是正确的。感谢 Java 论坛的一些帮助。然而我仍然不知道下一步该去哪里。

到目前为止,这是我的代码:感谢 this SO部分代码的答案

int count = 0;
getFile("C:\");

string DAPI;
string GFP;


private void getFile(String dirPath) {
File f = new File(dirPath);
File[] files = f.listFiles();

while (files.length > 0) {
if (/* File name contains "DAPI"*/){
DAPI = File f;
string substitute to get 'GFP' filename
store GFP file name into variable
do something(DAPI, GFP);
}
advance to next filename in list
}
}

到目前为止,我真的不知道如何在字符串中搜索字符串。我见过正则表达式捕获组和其他解决方案,但我不知道处理数百张图像的“最佳”解决方案。

我也不知道用什么函数来替换子字符串。

如果你们能指出最适合这种情况的功能,我将非常感激。我喜欢弄清楚如何自己制作,我只需要帮助获取正确的信息。还想确保我在这里没有犯重大逻辑错误。

最佳答案

如果您的文件名遵循您提到的简单模式,那么您似乎不需要正则表达式。您可以简单地迭代文件并根据文件名是否包含 DAPI 进行过滤,例如见下文。此代码可能过于简化了您的要求,但根据您提供的详细信息我无法判断这一点。

import java.io.*;


public class Temp {

int count = 0;

private void getFile(String dirPath) {
File f = new File(dirPath);
File[] files = f.listFiles();

if (files != null) {
for (File file : files) {
if (file.getName().contains("DAPI")) {
String dapiFile = file.getName();
String gfpFile = dapiFile.replace("DAPI", "GFP");
doSomething(dapiFile, gfpFile);
}
}
}
}

//Do Something does nothing right now, expand on it.
private void doSomething(String dapiFile, String gfpFile) {
System.out.println(new File(dapiFile).getAbsolutePath());
System.out.println(new File(gfpFile).getAbsolutePath());
}

public static void main(String[] args) {
Temp app = new Temp();
app.getFile("C:\\tmp\\");
}

}

注意:根据 Vogel612 的回答,如果您有 Java 8 并且喜欢功能性解决方案,您可以拥有:

private void getFile(String dirPath) {
try {
Files.find(Paths.get(dirPath), 1, (path, basicFileAttributes) -> (path.toFile().getName().contains("DAPI"))).forEach(
dapiPath -> {
Path gfpPath = dapiPath.resolveSibling(dapiPath.getFileName().toString().replace("DAPI", "GFP"));
doSomething(dapiPath, gfpPath);
});
} catch (IOException e) {
e.printStackTrace();
}
}

//Dummy method does nothing yet.
private void doSomething(Path dapiPath, Path gfpPath) {
System.out.println(dapiPath.toAbsolutePath().toString());
System.out.println(gfpPath.toAbsolutePath().toString());
}

关于java - 搜索目录中的文件并根据公共(public)子字符串将它们配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33680226/

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