2015-02-21 1 views
-2

У меня возникла проблема записи вывода в текстовый файл. Я не слишком уверен, как это сделать. Я попытался написать вывод, написав что-то по строкам: Writer является объектом класса printWriter:Запись вывода в текстовый файл в классе в java?

Это существенно сокращено, но оно сводится к минимуму.

Writer.println(sortRI()); 

Я не могу написать это заявление как метод itself- и все методы в этом классе я пытаюсь писать в выходной файл для аннулируются.

Итак, мой вопрос заключается в том, как написать вывод в текстовый файл из моих методов, которые являются недействительными - они распечатывают свои результаты с помощью нескольких операторов печати. Есть ли способ создать экземпляр писателя и использовать автора для печати методов. Ниже приведен пример одного из методов:

ZipCodeLocation [] data2 = new ZipCodeLocation [];

public class Processor 
{ 
    ... 

    public void readData(){ 

    ... 

    } 

public void findSpringfield() 
{ 
    System.out.println("------------------------------------------------------------------------"); 
    System.out.println("SPRINGFIELD ZIP CODES"); 

    for(int i=0; i < data2.length ; i++) 
    { 
     if(data2[i].getpostalCity().replaceAll("\"","").contains("SPRINGFIELD")) 
     { 
      System.out.println(data2[i].getzipCode().replaceAll("\"","")); //Prints out zipCodes that have Springfield in them 
     } 
    } 
} 

Вместо печати сообщение для System.out в консоли, как я мог бы это записать вывод метода в текстовый файл?

+0

У кого-нибудь есть идеи? Может действительно использовать некоторый ввод. –

ответ

2

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

Тема здесь - разделение бизнес-логики с интерфейсами. В более общем плане это обсуждение четко определенных обязанностей в объектно-ориентированной программе.

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

public List<String> findSpringfield() 
{ 
    List<String> results = new ArrayList<String>(); 
    for(int i=0; i < data2.length ; i++) { 
     if(data2[i].getpostalCity().contains("SPRINGFIELD")) { 
      results.add(data2[i].getzipCode().replaceAll("\"","")); //Collects zipCodes that have Springfield in them 
     } 
    } 
    return results; 
} 

Если это не вариант, при абсолютном минимуме вы хотели бы изменить свои методы, чтобы принять PrintStream параметр.

public void findSpringfield(PrintStream out) 
{ 
    out.println("------------------------------------------------------------------------"); 
    out.println("SPRINGFIELD ZIP CODES"); 

    for(int i=0; i < data2.length ; i++) { 
     if(data2[i].getpostalCity().contains("SPRINGFIELD")) { 
      out.println(data2[i].getzipCode().replaceAll("\"","")); //Prints out zipCodes that have Springfield in them 
     } 
    } 
} 

Таким образом, вы могли бы назвать это как

findSpringfield(System.out); 

Или вы могли бы передать его другой экземпляр PrintStream чем System.out, тот, который указывает на свой собственный файл.

Наконец, если ни один из вышеперечисленных вариантов не будет работать для вас, я расскажу вам, как сделать что-то очень плохое. Вы можете перенаправить System.out в файл по вашему выбору. Как я уже сказал, это ужасная идея; использовать его только в крайнем случае в очень ограниченном объеме.

System.out = new PrintStream("somePath/someFile.txt"); 

Кроме того, как улучшение дизайна, считают обобщающей ваш findSpringfield метода принять Строку postalCity параметра, так что вы можете использовать его, чтобы найти почтовые коды других городов.

public List<String> zipsByCity(String postalCity) 
{ 
    // use postalCity to filter results, rather than hardcoded "SPRINGFIELD" string 
} 
+0

Извините, я только что заметил это, дал вам это долгожданное одобрение! –

0

Try посылая в Writer в качестве аргумента метода и вместо печати на стандартный вывод внутри метода печати писателя:

public void findSpringfield(FileWriter writer) 
{ 
    writer.println("---------------------------------------------------            ---------------------"); 
      writer.println("SPRINGFIELD ZIP CODES"); 

for(int i=0; i < data2.length ; i++) 
{ 
    if(data2[i].getpostalCity().replaceAll("\"","").contains("SPRINGFIELD")) 
    { 
     writer.println(data2[i].getzipCode().replaceAll("\"",""));    //Prints out zipCodes that have Springfield in them 

    } 

    } 
0
File file = new File("out.txt"); 
     BufferedWriter output = new BufferedWriter(new FileWriter(file)); 
     for(int i=0; i < data2.length ; i++){ 
      if(data2[i].getpostalCity().replaceAll("\"","").contains("SPRINGFIELD")){ 
       output.write(data2[i].getzipCode().replaceAll("\"","")); 
      }   
     } 
     output.close(); 

это должно работать, но это потребует попробовать -catch block или throws declare

0

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

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

Почему бы не написать метод void findTown (String townName)? Возможно, я ошибаюсь или не понимаю, чего вы пытаетесь достичь, но если я прав, вы пойдете в неверном направлении.