2011-01-23 2 views
0

Ладно, так что я получил мой класс (извините о форматировании, не слишком знакомый с сайтом)Запись массива в файл

import java.io.*; 
public class writingArray 
{ 
    public static void writeToFile(String fileName, String[] input) { 
     PrintWriter printWriter; 
     try {  
      printWriter = new PrintWriter(new FileOutputStream(fileName, true)); 
      int length = input.length;  
      int i; 
      for(i = 0; ++i < length; i++) { 
       printWriter.println(input[i]); 
      } 
      printWriter.close();  
     } 
     catch(IOException e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

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

Спасибо ^^

ответ

2
for(i = 0; ++i < length; i++) { 

Я не думаю, что вы хотите увеличить i дважды. Избавьтесь от ++ i.

+0

Согласовано. Вы не должны использовать эту конструкцию, поскольку это не нормальная практика –

2

Я настоятельно рекомендую использовать библиотеку http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html, которая уже захваченному многие из этих проблем. Если вы преобразовать ваш массив в список вы можете использовать:

public static void writeLines(File file, 
           Collection<?> lines) 
         throws IOException 

Записывает значение ToString() каждого элемента в коллекции указанной линии файла построчно. Будет использоваться кодировка по умолчанию VM и окончание строки по умолчанию .

Авторы библиотеки подумали о многих проблемах, которые большинство людей не имеют, таких как линии, кодировки, улавливание ошибок и т. Д. Это также, вероятно, будет настолько эффективным, насколько это возможно для общего использования.

+0

Пожелание, которое я знал об этом, я обязательно изучу, используя этот метод. –

0

for(i = 0; ++i < length; i++) { действительно выглядит правильно, должно ли это быть for(i = 0; i < length; i++) {?

Или еще лучше: for (String line : input) { }

Кроме того, new FileOutputStream(fileName, true) не очистит файл, а добавить к нему.

0
import java.io.*; 

public class writingArray { 
    public static void writeToFile(String fileName, String[] input) { 
     PrintWriter printWriter = null; 
     try { 
      printWriter = new PrintWriter(new FileOutputStream(fileName)); 
      for (int i = 0; i < input.length; i++) { 
       printWriter.println(input[i]); 
      } 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
     } finally { 
      if (printWriter != null) { 
       printWriter.close(); 
      } 
     } 
    } 

}