Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > список файлов


Автор: #Maestro# 8.7.2009, 08:50
народ, помогите! как вывести на консоль список файлов данной директории? и как менять текущую директорию?

Автор: LSD 8.7.2009, 17:57
Цитата(#Maestro# @  8.7.2009,  08:50 Найти цитируемый пост)
как вывести на консоль список файлов данной директории?

Смотри java.util.File.


Цитата(#Maestro# @  8.7.2009,  08:50 Найти цитируемый пост)
и как менять текущую директорию? 

Что под этим подразумевается?

Автор: NeoNYura 8.7.2009, 18:11
Код

String str[]=new File(path).list();

Автор: korob2001 8.7.2009, 18:49
Цитата(LSD @  8.7.2009,  14:57 Найти цитируемый пост)
Что под этим подразумевается? 

Думаю он имеет ввиду программную смену рабочего каталога, в Perl эта функция называется chdir(...).
Делает примерно то же, что и системная команда cd /путь/к/другому/каталогу, после чего этот каталог становится текущим рабочим каталогом.

Автор: #Maestro# 9.7.2009, 10:45
korob2001, совершенно верно!

Автор: LSD 9.7.2009, 12:39
Код

System.setProperty("user.dir", "C:\\Develop");

Автор: admin82 9.7.2009, 13:10
Вот  только отдельно бы заметил, что вызов
Код

System.setProperty("user.dir", "C:\\Develop");

уже по ходу выполнения программы ничего не поменяет. Т.е. конечно вызов 
Код

System.getProperty("user.dir")
 
вернет новое значение, но вот на поведение системы это уже не повлияет.
По крайней мере относительные пути будут рассчитываться исходя из старой директории. 

Автор: LSD 9.7.2009, 14:14
Цитата(admin82 @  9.7.2009,  13:10 Найти цитируемый пост)
По крайней мере относительные пути будут рассчитываться исходя из старой директории.

Код

public class Test
{
  public static void main(String[] args) throws Exception
  {
    printInfo();
    System.setProperty("user.dir", "C:\\Develop");
    printInfo();
  }

  private static void printInfo() throws Exception
  {
    String userDir = System.getProperty("user.dir");
    System.out.println("userDir = " + userDir);
    File currentDir = new File(".").getCanonicalFile();
    System.out.println("currentDir = " + currentDir);
    System.out.println();
  }
}

Автор: admin82 9.7.2009, 14:26
Код

public class Test {
    public static void main(String[] args) throws Exception {
        printInfo();
        System.setProperty("user.dir", "C:\\Develop");
        printInfo();
    }

    private static void printInfo() throws Exception {
        String userDir = System.getProperty("user.dir");
        System.out.println("userDir = " + userDir);
        File existingFile = new File("11.txt");
        System.out.println();
        System.out.println(MessageFormat.format("Does file {0} exist? {1}",
                existingFile.getCanonicalPath(), existingFile.exists()));
        System.out.println();
    }
}

А теперь пусть файл C:\Develop\11.txt существует, а в текущей директории не существует.
Однако тест оба раза выведет false.

Вот такая жесть, пару месяцев назад сам маялся.

Автор: LSD 9.7.2009, 16:56
Надо просто getCanonicalPath() вызывать сразу smile
Код

public class Test
{
  public static void main(String[] args) throws Exception
  {
    printInfo();
    System.setProperty("user.dir", "C:\\Develop");
    printInfo();
  }

  private static void printInfo() throws Exception
  {
    String userDir = System.getProperty("user.dir");
    System.out.println("userDir = " + userDir);
    File existingFile = new File("1.txt").getCanonicalFile();
    System.out.println();
    System.out.printf("File '%s' %s%n", existingFile, existingFile.exists() ? "exist" : "not exist");
    System.out.println();
  }
}

Автор: admin82 9.7.2009, 17:01
Ну да, так лучше. Но нифига не очевидно

Автор: korob2001 10.7.2009, 06:20
Я пытался найти в Java аналог chdir(...) где-то год назад. Погуглил и нашёл, статью где было написано, что Sun отказались от программной смены рабочего каталога, потому как эта возможность несёт в себе больше вреда, чем пользы. Может быть они и правы, так как лично я никогда не меняю рабочий каталог, даже там где оно поддерживается, соответственно никогда не пользуюсь cwd, да бы найти себя в файловой системе. Кому-то это не даёт покоя, вот кстати ссылка по теме, где народ волнуется, недовольные есть, а так же приводятся примеры, как можно решить проблему отсутствия chdir(...) в Java: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4045688

Автор: #Maestro# 11.7.2009, 12:59
спосибо, ребята!!!
LSD особоsmile

Автор: #Maestro# 11.7.2009, 16:03
поробовал по вашим примерам вывести на консоль файлы текущий папки

Код

String userDir = System.getProperty("user.dir");
  
ArrayList<String> ar1 = new ArrayList<String>();

        File f1 = new File(userDir);
        String s[] = f1.list();
 for (int i = 0; i < s.length; i++)
 {
if (!(new File(s[i])).isDirectory())

 ar1.add(s[i]);

     System.out.println(ar1.add(s[i]));
 }


получается бяка. подскажите почему?

Автор: AlexeyVorotnikov 13.7.2009, 10:50
Цитата(#Maestro# @  11.7.2009,  17:03 Найти цитируемый пост)
получается бяка. подскажите почему?

А в чём именно состоит бяка?

Автор: LSD 13.7.2009, 18:14
Блин! smile Как вообще можно такой бред писать?

Ты или добавляй данные в список, или выводи на консоль. Зачем нужно пытаться совместить и то и другое?
Код

    ArrayList<String> ar1 = new ArrayList<String>();
    File f1 = new File(userDir);
    String s[] = f1.list();
    for(String value : s)
    {
      if(!(new File(value)).isDirectory())
        ar1.add(value);
      System.out.println(value);
    }

Автор: NeoNYura 13.7.2009, 18:42
LSD


это "Индусский код" =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)