2013-05-16 4 views
0

У меня есть мой метод все готово, но он просто не записывает дубликаты в мой текстовый файл, как он должен делать, он выводит на экран, но не в файл?Как написать текстовый файл

// Open the file. 
File file = new File("file.txt"); 
Scanner inputFile = new Scanner(file); 
//create a new array set Integer list 
Set<Integer> set = new TreeSet<Integer>(); 
//add the numbers to the list 
while (inputFile.hasNextInt()) { 
    set.add(inputFile.nextInt()); 
} 
// transform the Set list in to an array 
Integer[] numbersInteger = set.toArray(new Integer[set.size()]); 
//loop that print out the array 
for(int i = 0; i<numbersInteger.length;i++) { 
     System.out.println(numbersInteger[i]); 
} 
for (int myDuplicates : set) { 
    System.out.print(myDuplicates+","); 
    BufferedWriter duplicates = new BufferedWriter(new FileWriter("sorted.txt")); 
    try { 
      duplicates.write(myDuplicates + System.getProperty("line.separator")); 
     } catch (IOException e) { 
      System.out.print(e); 
      duplicates.close(); 
     } 
    //close the input stream 
     inputFile.close(); 
    } 
} 

Эта часть является одним им говорить о

for (int myDuplicates : set) { 
     System.out.print(myDuplicates+","); 
     BufferedWriter duplicates = new BufferedWriter(new FileWriter("sorted.txt")); 
     try { 
      duplicates.write(myDuplicates + System.getProperty("line.separator")); 
     } catch (IOException e) { 
      System.out.print(e); 
      duplicates.close(); 
     } 
     //close the input stream 
     inputFile.close(); 
     } 
} 

ответ

2

Вы только призывающую duplicates.close() если есть IOException. Если вы не закроете запись, вы не очистите ее от буферизованных данных. Вы должны закрыть запись в блоке finally, чтобы закрыть ее, есть ли исключение или нет.

Однако, вы должны открыть и закрыть файл снаружи цикл. Вы хотите, чтобы файл был открыт в течение всего цикла. Вы, вероятно, хотите:

BufferedWriter duplicates = new BufferedWriter(new FileWriter("sorted.txt")); 
try { 
    // Loop in here, writing to duplicates 
} catch(IOException e) { 
    // Exception handling 
} finally { 
    try { 
     duplicates.close(); 
    } catch (IOException e) { 
     // Whatever you want 
    } 
} 

Если вы используете Java 7, вы можете сделать это более просто с помощью примерки с-ресурсов заявление.

(Кроме того, по какой-то причине вы звоните inputFile.close() в петле, миль после того как вы на самом деле закончил читать из него. Опять же, это должно быть в finally блоке, когда вы больше не нужно inputFile.)

+0

теперь он записывает только 1 номер в файл –

+0

@WagnerMaximiliano: вам следует открыть и закрыть его * снаружи * цикл. Измените ответ, чтобы сделать это понятным. –

+0

Я действительно получил это сейчас благодаря –

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