2012-05-29 4 views
1

Im пытается вывести целочисленный массив в файл и попал в ловушку. Код выполняется правильно, никаких ошибок не было, но вместо того, чтобы дать мне файл, содержащий числа 1-30, он дает мне файл, заполненный [] [] [] [] []. Я выделил проблему для включенного сегмента кода.Цепочки вывода Java в файл

try 
     { 
     BufferedWriter bw = new BufferedWriter(new FileWriter(filepath)); 
     int test=0; 
     int count=0; 
     while(count<temps.length) 
     { 
      test=temps[count]; 
      bw.write(test); 
      bw.newLine(); 
      bw.flush(); 
      count++; 
     } 
     } 
     catch(IOException e) 
     { 
      System.out.println("IOException: "+e); 
     } 

filepath ссылается на местоположение выходного файла. temps - это массив, содержащий значения 1-30. Если больше информации необходимо, я буду рад предоставить.

+0

Можете ли вы подтвердить, что вы хотите, чтобы файл «текст», содержащий человеческий читаемый данные , а не двоичный файл? –

+0

Выходной файл должен быть удобным для пользователя «текстовым» файлом – MFrantz

ответ

4

BufferedWriter.write(int) записывает значение символа в межд, а не INT значение. Поэтому вывод 65 должен помещать письмо A в файл, 66 будет печатать B ... и т. Д. Вам нужно записать значение String, а не значение int для потока.

Использование BufferedWriter.write(java.lang.String) вместо

bw.write(String.valueOf(test)); 
0

Вы можете преобразовать целочисленный массив в массив байтов и сделать что-то вроде этого:

public void saveBytes(byte[] bytes) throws FileNotFoundException, IOException { 
try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(filepath))) { 
    out.write(bytes); 
} 
} 
0

Вы пишете число как Integer к файлу, но вы хотите, чтобы быть строкой. изменить bw.write(test); к bw.write(Integer.toString(test));

1

Проблема у Вас есть то, что вы используете метод BufferedWriter.write(int). Что вас смущает, так это то, что, хотя подпись метода указывает, что она пишет int, она фактически ожидает, что int будет представлять кодированный символ. Другими словами, письмо 0 пишет NUL, и написание 65 будет выводить 'A'.

От Writer's Javadoc:

public void write(int c) throws IOException 

Пишет один символ. Символ, который должен быть записан, содержится в 16 младших битах заданного целочисленного значения; 16 старших бит игнорируются.

Простой способ исправить вашу проблему состоит в том, чтобы преобразовать число в строку перед записью. Есть много способов для достижения этой цели, в том числе:

int test = 42; 
bw.write(test+""); 
2

Я предлагаю использовать PrintStream или PrintWriter вместо:

PrintStream ps = new PrintStream(filePath, true); // true for auto-flush 
int test = 0; 
int count = 0; 
while(count < temps.length) 
{ 
    test = temps[count]; 
    ps.println(test); 
    count++; 
} 
ps.close();