2011-12-31 4 views
1

Я написал некоторый код для чтения в текстовом файле и для возврата массива с каждой строкой, хранящейся в элементе. Я не могу для жизни меня разобраться, почему это не работает ... может ли кто-нибудь быстро взглянуть? Выход из System.out.println (строка); null, поэтому я предполагаю, что есть проблема с чтением строки, но я не понимаю, почему. Btw, файл, который я передаю ему, определенно имеет что-то в нем!Чтение в текстовом файле в Java

public InOutSys(String filename) { 
    try { 
     file = new File(filename); 
     br = new BufferedReader(new FileReader(file)); 
     bw = new BufferedWriter(new FileWriter(file)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 



public String[] readFile() { 

    ArrayList<String> dataList = new ArrayList<String>(); // use ArrayList because it can expand automatically 
    try { 
     String line; 

     // Read in lines of the document until you read a null line 
     do { 
      line = br.readLine(); 
      System.out.println(line); 
      dataList.add(line); 
     } while (line != null && !line.isEmpty()); 
     br.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    // Convert the ArrayList into an Array 
    String[] dataArr = new String[dataList.size()]; 
    dataArr = dataList.toArray(dataArr); 

    // Test 
    for (String s : dataArr) 
     System.out.println(s); 

    return dataArr; // Returns an array containing the separate lines of the 
    // file 
} 
+0

У вас есть файл OK? Вы ищете файл в нужном месте (относительно директора пользователя)? –

+0

Где объявляется файл/br/bw? InOutSys и readFile являются общедоступными, но второй закрывает br. Как избежать обращения к readFile на закрытой странице? –

+0

местоположение вашего файла. – javaDisciple

ответ

2

Сначала вы открываете FileWriter один раз после открытия FileReader с использованием нового FileWriter (файла), который открывает файл в режиме создания. Таким образом, после запуска вашей программы это будет пустой файл.

Во-вторых, есть ли пустая строка в вашем файле? если это так,! line.isEmpty() завершит ваш цикл while-while.

1

Вы используете FileWriter для файла, который вы читаете, поэтому FileWriter очищает содержимое файла. Не читайте и не пишите в один и тот же файл одновременно.

также:

  • не предполагают файл содержит строку. Вы не должны использовать цикл do/while, а скорее цикл while;
  • всегда закрывает пары, читатели и писатели в блоке finally;
  • catch (исключение) - это плохая практика. Только поймайте исключения, которые вы хотите, и можете справиться. Иначе пусть они поднимаются в стек.
0

Есть несколько возможных причин для вашей проблемы:

  • Путь файла неправилен
  • Вы не должны пытаться читать/писать один и тот же файл, в то же время
  • Это не такой хорошая идея инициализировать буферы в конструкторе, подумайте об этом - какой-то метод может закрыть буфер, что делает его недействительным для последующих вызовов того или иного метода.
  • Неправильное условие цикла

Лучше попробовать этот подход для чтения:

try { 
    String line = null; 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    while ((line = br.readLine()) != null) { 
     System.out.println(line); 
     dataList.add(line); 
    } 
} finally { 
    if (br != null) 
     br.close(); 
} 
1

Я не уверен, если вы ищете способ улучшить свой предоставленный код или просто для решения «Чтение в текстовом файле в Java», как название было сказано, но если вы ищете решение, я бы рекомендовал использовать apache commons io для этого. Метод readLines от FileUtils будет делать именно то, что вы хотите.

Если вы хотите научиться на хорошем примере, FileUtils является открытым исходным кодом, поэтому вы можете взглянуть на то, как они решили реализовать его на looking at the source.

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

  • Нет связанных вопросов^_^