2013-06-13 4 views
2

Я новичок в Java и пытаюсь реализовать функцию, которая создает каталоги и соответствующие файлы. Одним из файлов является «mapping.txt», который находится внутри папки с именем NodeA. Содержимое map.txt является абсолютным путем NodeA.Запись пути к файлу (путь к папке, содержащей файл)

Код, приведенный ниже, я пробовал. Я прокомментировал все возможные места для лучшего понимания. Я хочу знать причину, по которой я не могу писать в файле. Любая помощь будет глубоко оценена.

//-------------------------- To create Node and their respective Files ------------------------------------------------------ 
     for(int j=0;j<alpha.length;j++){     //alpha is a String array which contains {"A","B","C","D"} 
      node_directory=Node.concat(alpha[j]);   // nodde_directory is "C:\Users\Desktop\Node. I concat A,B,C and D to create different directories. 
      File dir = new File(node_directory); 
     if(!dir.exists()){ 
      dir.mkdirs(); 
     } 
     System.out.println("Path: \n" +dir.getAbsolutePath()); 
     System.out.println(); 

     List<String> fileList = Arrays.asList(files);  // files is an array of string containing "mapping" and "data". 
     Iterator <String> iter = fileList.iterator();  //I traverse through the list. 
     while(iter.hasNext()){ 
      File next_file = new File(node_directory+"\\"+iter.next()+".txt"); //while traversing, I append the current "iter.next" to "node_directory" and append ".txt" to create files. 
      System.out.println("The Files are: \n" +next_file); 
      System.out.println(); 

      // I created the Directories, mapping and data Files for each directory. 

      /*I am stuck here, as it is not writing the path in the mapping File */ 

      if(iter.next()=="mapping"){   // I check if iter.next is mapping, so that i can write in the mapping file, the path of Folder containing mapping file. 
       BufferedWriter br = new BufferedWriter(new FileWriter(next_file)); 
       br.write(next_file.getAbsolutePath()); 
      } 


    if(!next_file.exists()){ 
       System.out.println(next_file.createNewFile()); 
     } 

Я понял, что происходит. Поскольку я просматриваю массив строк по списку. Проблема здесь:

next_file = new File(node_directory+"\\"+iter.next()+".txt"); // This line creates files by appending the required data. Since iter.next() returns all the Files in one go, 

BufferedWriter br = new BufferedWriter(new FileWriter(next_file)); 
       br.write(dir.getAbsolutePath()); 

В следующем файле есть все файлы, созданные за один раз. Мне нужно знать, как я могу проверить каждый файл после его создания, чтобы я мог редактировать файл.

спасибо.

+3

Как результат отличается от ожидаемого? –

+0

Я попытался вывести этот метод и он все равно не пишет. Файл пуст. Я попытался изменить проект и попробовать и все тот же результат. –

+0

Совет: добавьте @AdrianJandl (или кто бы то ни было - '@' важен), чтобы они * уведомили * о новом комментарии. –

ответ

0

Во-первых, назначить iter.next() локальной переменной:

String fileName= iter.next(); 

Потому что в следующий раз, когда вы называете это, итератор переходит к следующему значению, и вы можете получить NoSuchElementException и наверняка неправильный результат , Затем используйте эту переменную fileName в остальной части кода.

Другая ошибка в сравнении String с ==. Строка является неизменным объектом и с помощью == вы просто сравниваете ссылки на объекты, а не объекты. Таким образом, две совершенно одинаковые строки могут создавать ложные значения по сравнению с ==. .equalsTo() вместо:

if (fileName.equals("mapping")) 
+0

Я попытался сравнить с equals(), и он не работает. Все выглядит отлично, создавая файлы и каталоги, за исключением ввода данных. –

+0

Отладить его, увидеть, что две строки ДЕЙСТВИТЕЛЬНО одинаковы. равный ДОЛЖЕН работать в этом случае. Надеюсь, вы используете IDE (например, Eclipse) – darijan

+0

Yup. Я использую Netbeans IDE. –

Смежные вопросы