#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 недель в этом курсе, так что мы еще не зашли так далеко.