Как сделать массив строк, содержащий файловые каталоги? - PullRequest
1 голос
/ 05 марта 2012

В настоящее время я работаю над проектом для школы, он основан на Java, и я использую Eclipse на Linux Mint для его написания.В задании говорится, что используйте оператор String[] filenames = new java.io.File("icons).list(); для создания массива имен файлов.

Проблема в том, что я не уверен, что с этим делать, последние несколько часов я потратил на поиск интернета и своего учебника,но безрезультатно.Должен ли это быть отдельный метод?

Ниже приведено мое предположение о необходимом коде в модели (проект состоит в создании совпадающей игры с графическим интерфейсом), позже имена должны быть преобразованы вфактические значки, но я почти уверен, что я понял эту часть, я просто не могу получить чертовы файлы в массив !!

Заранее спасибо,

public String[] list() {
    String[] fileNames = new java.io.File("icons").list();
    return fileNames;
}

Ответы [ 3 ]

1 голос
/ 05 марта 2012

В Java класс File необязательно представляет «существующий» файл в файловой системе.Например:

File f = new File("some_unknown_unexisting_file.bob");
System.out.println(f.exists());  // most likely will print 'false'

Также класс разрешает файл из текущего рабочего каталога.Вы можете получить этот каталог с

System.out.println(new File(".").getAbsolutePath());

. В вашем случае, если вы можете, я бы предложил получить массив File[] с:

File[] files = new File("icons").listFiles(new FileFilter() {
   @Override
   public boolean accept(File f) {
      return !f.isDirectory() && f.canRead();
   }
});
for (File f : files) {
   System.out.println(f.getAbsolutePath());
}

, который будет возвращать массив File объекты, которые не являются папками и которые вы можете открыть для чтения (обратите внимание, что это не всегда так, но в вашем случае это нормально).

Но если у вас есть для использованияlist(), то это эквивалентно:

File parent = new File("icons");
String[] fileStr = parent.list(new FilenameFilter() {
   @Override
   public boolean accept(File dir, String name) {
      File f = new File(dir, name);
      return !f.isDirectory() && f.canRead();
   }
});
for (String f : fileStr) {
   System.out.println(new File(parent, f).getAbsolutePath());
}

Кроме того, с вашим списком файлов (String[]) вы можете создать значок, используя:

String filename = fileStr[i];  // some file name within the array
ImageIcon icon = new ImageIcon("icons" + File.separator + filename); 

илисписок файлов (File[]), он чище:

File file = files[i];   // some file within the File[] array
ImageIcon icon = new ImageIcon(file.getAbsolutePath());

Удачи.

0 голосов
/ 06 марта 2012

У меня была такая же проблема. Когда я попытался переместить папку с иконками в папку непосредственно перед папкой src, она, кажется, работала. Не уверен, что я буду делать, когда я отправлю задание, так как оно должно работать в JCreator, я думаю, что это должно быть с файлами .java.

0 голосов
/ 05 марта 2012

Код, который вы написали, выглядит хорошо. Вы уверены, что папка "icons" существует там, где ищет Java?

Попробуйте это:

File f = new File("icons");
System.out.println("Does icons exist?" + f.exists());
System.out.println("Is it a dir?" + f.isDirectory());
System.out.println("How many files does it contain?" + f.list().length);

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...