Список файлов Java: NPE при использовании цикла for

Я написал простой java-код для отображения списка файлов в Linux, чтобы использовать его для программы FTP с использованием TCP (я буду шаг за шагом, используя все функции). Я публикую этот вопрос после того, как погуглил около получаса.

import java.io.*;
class FileList
{
public static void main(String args[])
{
String dirname="/home/vaibhav/Test";
File f1=new File(dirname);
String sl[]=f1.list();
System.out.print(f1.list()+"......."+sl.length+" files found.");
for(int i=0;i<sl.length;i++)
{ 
System.out.print(sl[i]+" ");
}      
}
}

Выход:

vaibhav@vaibhav-VirtualBox:~/Java$ javac FileList.java
vaibhav@vaibhav-VirtualBox:~/Java$ java FileList
Exception in thread "main" java.lang.NullPointerException
    at FileList.main(FileList.java:10)

Мои тестовые каталоги и содержимое Java:

vaibhav@vaibhav-VirtualBox:~$ cd /home/vaibhav/Test
vaibhav@vaibhav-VirtualBox:~/Test$ dir
1  2
vaibhav@vaibhav-VirtualBox:~/Test$ ls -al
total 8
drwxrwxrwx  2 vaibhav vaibhav 4096 Jan 18 15:04 .
drwxr-xr-x 25 vaibhav vaibhav 4096 Jan 18 16:50 ..
-rw-rw-rw-  1 vaibhav vaibhav    0 Jan 18 15:04 1
-rw-rw-rw-  1 vaibhav vaibhav    0 Jan 18 15:04 2
vaibhav@vaibhav-VirtualBox:~/Test$ cd
vaibhav@vaibhav-VirtualBox:~$ cd /home/vaibhav/Java
vaibhav@vaibhav-VirtualBox:~/Java$ ls -al
total 20
drwxr-xr-x  2 vaibhav vaibhav 4096 Jan 18 16:52 .
drwxr-xr-x 25 vaibhav vaibhav 4096 Jan 18 16:50 ..
-rw-r--r--  1 vaibhav vaibhav  990 Jan 18 16:52 FileList.class
-rw-r--r--  1 vaibhav vaibhav  477 Jan 18 16:52 FileList.java
-rw-r--r--  1 vaibhav vaibhav  487 Jan 18 16:52 FileList.java~

Когда я изменил String dirname на /home/vaibhav/Java, который также является pwd, программа работала хорошо.

В чем проблема? Спасибо.


person javaEntu    schedule 18.01.2014    source источник
comment
для линии цикла это строка 10   -  person javaEntu    schedule 18.01.2014
comment
Ммм... Сомневаюсь, почему мы не получаем вывод от print. Я думаю, что sl равно нулю. Что дает f1.isDirectory().   -  person PeterMmm    schedule 18.01.2014
comment
нет, sl не равно нулю. Я добавил к нему 2 файла перед запуском кода.   -  person javaEntu    schedule 18.01.2014
comment
Это связано с pwd?   -  person javaEntu    schedule 18.01.2014


Ответы (1)


Лучше попробовать это:

File folder = new File("your/path");
File[] listOfFiles = folder.listFiles();

    for (int i = 0; i < listOfFiles.length; i++) {
      if (listOfFiles[i].isFile()) {
        System.out.println("File " + listOfFiles[i].getName());
      } else if (listOfFiles[i].isDirectory()) {
        System.out.println("Directory " + listOfFiles[i].getName());
      }
    }

Надеюсь, это поможет вам

person Raj    schedule 18.01.2014
comment
Я пробовал это тоже, прежде чем опубликовать здесь. Но в одном сообщении stackoverflow.com/a/11643057/2642938 говорится, что использование list() лучше, чем использование listFiles(). Мой главный вопрос: когда я изменил имя каталога String на /home/vaibhav/Java, которое также является pwd, программа выполнялась хорошо. - person javaEntu; 18.01.2014
comment
можете ли вы объяснить более четко, каково ваше требование именно @VAL - person Raj; 18.01.2014
comment
Для отображения списков файлов из .../Test dir. @SanthoshKumar544 - person javaEntu; 18.01.2014
comment
так что какой бы ответ я ни опубликовал, он определенно отображает списки файлов по вашему желаемому пути, а также включая каталоги @VAL - person Raj; 18.01.2014
comment
да, я не знаю, почему он не отображал это раньше! Вот почему я разместил это здесь. Теперь, после многократного изменения имени каталога, он работает хорошо. - person javaEntu; 18.01.2014
comment
затем предоставьте код перед изменением имени каталога, чтобы я мог внести ясность в вашу путаницу и мог сказать, каким был точный pblm до - person Raj; 18.01.2014
comment
Я просто изменил имя каталога на .../Java (то есть pwd), заменив .../Test - person javaEntu; 18.01.2014