2013-09-18 6 views
0

Я работаю над программой, которая рассчитывает alla простые числа от 2 до 10 000 и записывает это в файл.Как написать файл несколько раз в java?

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

Может ли кто-нибудь сказать мне, если это способ сделать это, если нет, как это сделать или как я могу это сделать?

Чтобы уже иметь файл, он также может работать, а затем просто добавлять/редактировать/перезаписывать его из моей программы.

public static void main(String[] arg){ 
    int prime = 2; 

    File file = new File("out.txt");  // how should i do this part 
    FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
    BufferedWriter bw = new BufferedWriter(fw);  

    while(prime < 10000){ 
     boolean isPrime = true; 

     for(int i = 2; i <= sqrt(prime); i++){ 
      if((prime%i) == 0){ 
       isPrime = false; 
       break; 
      } 
     } 
     if(isPrime){ 
      bw.write(prime + " ");  // and this 
     } 
     prime++; 
    } 
} 
+0

Какие ошибки вы получаете? Пожалуйста, отправьте следы стека, если они доступны. –

ответ

0

Я думаю, что ваши ошибки происходят из-за отмеченных исключений, что некоторые из вашего кода может бросить, и что вы не ловить или объявления main бросить. Вы также потенциально теряете ресурсы. Если вы используете Java 7, я предлагаю следующее (используя try-with-resources statement):

public static void main(String[] arg){ 
    File file = new File("out.txt"); 
    try (
     BufferedWriter bw = new BufferedWriter(new FileWriter(file)) 
    ) { 
     for (int prime = 2; prime < 10000; ++prime) { 
      boolean isPrime = true; 
      final int limit = (int) sqrt(prime); // 
      for (int i = 2; i <= limit && isPrime; i++) { 
       isPrime = prime % i != 0; 
      } 
      if (isPrime){ 
       bw.write(String.valueOf(prime)); 
       bw.newLine(); 
      } 
     } 
    } catch (IOException ex) { 
     e.printStackTrace(); 
    } 
} 

До Java 7, вы должны сделать что-то вроде этого:

public static void main(String[] arg){ 
    File file = new File("out.txt"); 
    BufferedWriter bw = null; 
    try { 
     bw = new BufferedWriter(new FileWriter(file)); 

     for (int prime = 2; prime < 10000; ++prime) { 
      boolean isPrime = true; 
      int limit = (int) sqrt(prime); 
      for(int i = 2; i <= limit && isPrime; i++) { 
       isPrime = prime % i != 0; 
      } 
      if (isPrime) { 
       bw.write(String.valueOf(prime)); 
       bw.newLine(); 
      } 
     } 
    } catch (IOException ex) { 
     e.printStackTrace(); 
    } finally { 
     if (bw != null) { 
      try { bw.close(); } 
      catch (IOException ignored) { } 
     } 
    } 
} 

как в сторону, ваш подход к первоклассность тестирования крайне неэффективна. Вы можете взглянуть на использование Sieve of Eratosthenes.

+0

Спасибо! Теперь он работает так, как должен! Я знаю, что этот метод не самый лучший, но это простой способ. Но я рассмотрю ваше предложение и, возможно, сделаю еще одну программу с помощью этого метода! – user2792927

0

Вы должны написать, а затем закрыть FileWriter и BufferedWriter в конце.

Поместите эти строки на последней после цикла -

bw.close(); 
fw.close(); 

Кроме того, используя FileWriter fw = new FileWriter(file.getAbsoluteFile(), true); позволит вам добавлять в существующий файл. Пожалуйста, обратите внимание на «истину».

2

Код выглядит отлично, просто не забудьте закрыть свои потоки, когда закончите.

Если вы не хотите, чтобы новый файл каждый раз, вы можете открыть существующий файл в режиме записи

How do I create a file and write to it in Java?

0

Я поставил бы bw.write(prime + " ");try/catch в блоке, чтобы выйти из грациозно, если что-то не , Вы также можете захотеть включить оператор file.createNewFile(), если файл не file.exists().

Наконец, убедитесь, что вы забуференный писатель bw.close().

Кроме этого, да, все смотрит на пар.

я сделал бы:

try { 
    bw.write(stuff); 
} 
Catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

Я положил блок try/catch в оператор if if и bw.close(); после моего цикла while, но он все равно не будет компилироваться. В нем говорится: «незарегистрированное исключение ioexception должно быть уловлено или объявлено, что оно будет выброшено» по поводу моего создания файла – user2792927

0

Используйте StringBuffer для кэширования всех простых чисел, и после того, как цикл for завершает итерацию по всем числам, преобразуйте StringBuffer в String и напишите в выходной файл за один раз.

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