gpt4 book ai didi

java - 我怎样才能创建一个包含java目录和子目录中所有文件的Jtable

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

我有这段代码,所以我的问题是,在 jtable 中我应该介绍已找到的所有文件,在 jtable 中,列是文件的第一个名称,第二列是路径或方向,第三列是日期文件。我需要在 java 中创建 arraylist,其中保存已找到的所有文件

这是代码:

    for(int i =0; i < diret.length;i++){ 
for(int j =0; j < diret.length;j++){
File f = new File(dire.getAbsolutePath(),diret[j]);
if(f.isDirectory()){
String nombreSub[] = f.list();
tamanio = nombreSub.length;
for(int z =0; z < nombreSub.length;z++){
n1.add(nombreSub[z]);
n2.add(f.getAbsolutePath());
n3.add(date.format(f.lastModified()));
}
}
}

}


for( int i =0; i < tamanio+diret.length;i++){
documento nFile = new documento((String)n1.get(i),(String)n2.get(i),(String)n3.get(i));

doc.add(nFile);
}

最佳答案

对于您所要求的问题,一个非常基本的解决方案如下。这将有效地创建一个新的JTable,列出给定路径的从顶层到子目录的所有文件。

public class FileTest {

public static void main(String... args) {
var frame = new JFrame();
var table = new JTable(new FileTestModel(getFiles("D:\\test")));
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(table), BorderLayout.CENTER);
frame.add(table.getTableHeader(), BorderLayout.NORTH);
frame.setVisible(true);
frame.setSize(300, 300);
}

private static List<FileContent> getFiles(String directory) {
List<FileContent> list = new ArrayList<>();
try (var pathStream = Files.walk(Paths.get(directory))) {
list = pathStream
.filter(Files::isRegularFile)
.map(Path::toFile)
.map(file -> new FileContent(file.getName(), file.getAbsolutePath(), new Date(file.lastModified())))
.collect(Collectors.toList());
} catch (IOException e) {
System.err.println("An error has occurred:: " + e.getMessage());
}
return list;
}

private static final class FileTestModel extends AbstractTableModel {

private static final String[] COLUMNS = { "File Name", "Root Path", "File Date" };

private final List<FileContent> contents;

FileTestModel(List<FileContent> contents) {
this.contents = contents;
}

@Override
public int getRowCount() { return contents.size(); }

@Override
public int getColumnCount() { return COLUMNS.length; }

@Override
public String getColumnName(int column) {
return COLUMNS[column];
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return contents.get(rowIndex).getFileName();
case 1:
return contents.get(rowIndex).getRootPath();
case 2:
return contents.get(rowIndex).getFileDate();
}
return null;
}

}

private static final class FileContent {

private final String fileName;
String getFileName() { return fileName; }

private final String rootPath;
String getRootPath() { return rootPath; }

private final Date fileDate;
Date getFileDate() { return fileDate; }

FileContent(String fileName, String rootPath, Date fileDate) {
this.fileName = fileName;
this.rootPath = rootPath;
this.fileDate = fileDate;
}

}

}

这样,您就可以遍历给定的目录,检索将它们映射到 File 对象的所有常规文件,然后将它们映射到中间 FileContent 对象。检索操作完成后,将使用一个非常简单的 JTable 显示结果。

您可以使用此示例来指导您。理想情况下,我会让文件检索操作在单独的线程上运行,以避免列出大目录时出现滞后(因为这是一个阻塞操作),并且我会让加载器显示在 jtable 表中,但出于以下目的这个例子就可以了。

关于java - 我怎样才能创建一个包含java目录和子目录中所有文件的Jtable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55317970/

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