我必须构建一个 java 应用程序,它使用线程在Directory和SubDirictory中返回pdf文件的名称。 但另外我还要按照字母顺序打印它。 我编写了这段代码,它对每个帖子的结果进行排序,但没有对结局结果进行排序。
public class Pdf extends Thread {
File f;
ArrayList<String> a = new ArrayList<>();
public Pdf(File f, String name) {
super(name);
this.f = f;
}
ArrayList<String> a1 = new ArrayList<>();
@Override
public synchronized void run() {
for (File file : f.listFiles()) {
if (file.isFile() && file.getName().contains(".pdf")) {
if (file.getName().charAt(0) >= 'a' && file.getName().charAt(0) <= 'z') {
Collections.sort(a);
a.add(file.getName());
}
}
if (file.isDirectory()) {
new Pdf(file, file.getName()).start();
}
}
Collections.sort(a);
Collections.reverseOrder();
for (String l : a) {
System.out.println(l);
}
}
}
答案 0 :(得分:2)
如果有目录,则表示您正在创建新的thread
。该线程正在计算文件并将其添加到其自己的本地变量列表中。列表按一个线程排序,但由于不同线程有几个不同的列表,因此您无法获得整体排序结果。此外,由于不同的线程将单独运行,因此您可以获得文件名的随机输出。
要克服这个问题,您可以执行以下任一操作。
如果您想要反转列表,还需要注意一个不同的注释,那么您必须拨打Collections.reverseOrder(a)
答案 1 :(得分:1)
您将需要一个所有线程都将其结果添加到的集合。确保该集合是同步集合。否则,该集合可能会“破裂”。然后,您必须等到所有线程都完成。一旦它们出现,您必须对它们添加的集合进行排序并返回它。