Нужна помощь в записи в файл ввода / вывода на Java

#java #io

#java #io

Вопрос:

Новичок в Java и нуждается в некоторой помощи. Я работаю с 2 файлами. Один определяет класс и все его методы, а другой создает экземпляр этого класса. Мой проект требует, чтобы мы записывали выходные данные из методов класса в файл. Мой вопрос в том, как мне заставить методы в моем файле «определение класса» записывать в тот же файл, что и определенный в моем «основном методе»? В настоящее время я использую System.out.print , что, как я знаю, неверно. //Файл #1

 public class JessiahP3 {
    boolean  isPlaying =  false;
    int strings  = 1;
    boolean isTuned = false;
    public String instrumentName;


    //is tuned
    public void tune() {
        if(isTuned == false)
            isTuned = true;
        else
            isTuned = false;
    }

    //instrument name
    public void setInstrumentName(String insName){
        instrumentName = insName;
    }

    //get instrument name
    public String getInstrumentName(){
        return instrumentName;
    }

    private Boolean getTuned(){
        return isTuned;
    }

    public void playInstrument(){
        isPlaying = true;
        System.out.println("The instrument is now playing.");
    }

    public void stopInstrument( ){
        isPlaying = false;
        System.out.print("The instrument has stopped playing.");
    }

    public void setString(int newString){
        if (newString >=  1 amp;amp; newString <= 6)    
            strings = newString;
        else
            System.out.print("You have exeeded the maximum number of strings.");
    }

    public void stringUp(){
        if (strings < 10)
            strings  ;
    }

    public void stringdown(){
        if (strings > 1)
            strings--;
    }

    public String[] getStringNames(String[] stringNames) {
        for (String i:stringNames){
            System.out.println(i);
        }
        return stringNames;
    }
}
  

Файл #2

 import java.util.*;
import java.io.*;

public class JessiahP3Test {

    public static void main(String[] args)throws Exception {
        //declare new input/ output file
        java.io.File newFile = new java.io.File("Jessiahp4.txt");
        //java.io.File newFile = new java.io.File(args[0]);

        //check to see if file exist
        if (newFile.exists()) {
            //delete existing file
            newFile.delete();
        }

        //create a file
        java.io.PrintWriter output = new java.io.PrintWriter(newFile);

        //instance 1 of Instrument = Guitar    
        JessiahP3 guitar = new JessiahP3();
        guitar.setInstrumentName("Guitar");
        guitar.setString(3);
        output.println("Your current string number is "   guitar.strings);
        String[] stringNames = {"Abe", "Blue", "Dream"};
        guitar.getStringNames(stringNames);
        output.print("Tuning "   guitar.getInstrumentName());
        guitar.tune();
        guitar.playInstrument();
        //output.print("The"   guitar.getInstrumentName()   "is playing");
        guitar.stopInstrument();


        //close i/o file
        output.close();
    }
}
  

Ответ №1:

Добавьте частное PrintWriter свойство в первый класс и определите setPrintWriter() метод, который вы вызываете из второго класса после того, как вы создали экземпляр первого класса и создали PrintWriter . После этого вы можете изменить, playInstrument() чтобы использовать его вместо System.out .

ПРИМЕЧАНИЕ: Все файлы .java (за исключением интерфейсов) могут быть классифицированы как «файлы определения класса», потому что никакой код не может существовать вне класса в Java.

Комментарии:

1. привет, можете ли вы помочь мне определить метод setPrintWriter? ‘private void setPrintWriter() { java.io.PrintWriter = new java.io.PrintWriter(newFile); }’

2. @Jessiah: Сначала добавьте свойство в начало вашего класса: private java.io.PrintWriter printWriter; и определите метод как public void setPrintWriter(java.io.PrintWriter pw) { this.printWriter = pw; } . Он не может быть закрытым или его нельзя вызвать из вашего основного класса.

Ответ №2:

Поскольку большинство выводимых вами данных выглядят как инструкции отладки, есть второй способ выполнить это. Вы можете использовать System.setOut(PrintStream PrintStream) в первом файле и передать ему PrintStream (измените свой PrintWriter на PrintStream, это то же самое, для чего вы его используете). Затем в вашем другом файле System.out.println() будет печатать в файл вместо стандартного вывода.

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

Итак, во втором файле измените:

 java.io.PrintWriter output = new java.io.PrintWriter(newFile);
  

Для

 System.setOut(new PrintStream(newFile));
  

и изменить:

 output.println("Your current string number is "   guitar.strings);
...
output.print("Tuning "   guitar.getInstrumentName());
  

Для

 System.out.println("Your current string number is "   guitar.strings);
...
System.out.print("Tuning "   guitar.getInstrumentName());
  

Комментарии:

1. Это работает идеально. Спасибо. Я только 8 недель в этом курсе, так что мы еще не зашли так далеко.