将Instrument类方法的输出写入用户从命令行参数输入的文本文件

时间:2013-12-07 21:32:41

标签: java class methods

我正在学习Java入门编程课程,目前我正在进行最终项目。可在此处找到作业说明link

我很难完成这项工作“将Instrument类方法的输出写入用户从命令行参数输入的文本文件(例如java Mynamep3tst myfilename.txt)。”这是我的一些代码:

import java.io.*;

public class Test{

public static void main(String[] args) {

    String outputFile = "";
    if (0 < args.length) {
         outputFile = args[0];
         System.out.println("This program will write output to this file: " + outputFile + "\n");

     try {

        File file = new File(outputFile);

       PrintWriter output = new PrintWriter(outputFile);

        output.println("hello"); //to check if ir prints anything

        Violin[] simpleViolin = new Violin[5];

   //Create 5 violin objects
    for (int i = 0; i < simpleViolin.length; i++){
        simpleViolin[i] = new Violin();
    }

    output.println("\nLet's tune " + Violin.getNumberOfViolins() + " violins.");
    for(int i = 0; i < simpleViolin.length; i++){
        output.print(i + 1);
        simpleViolin[i].tuneOn();
    }

   output.println("\nNow let's start playing " + Violin.getNumberOfViolins() + " violins.");
   for(int i = 0; i < simpleViolin.length; i++){
        output.print(i + 1);
        simpleViolin[i].startPlaying();
    }

    output.println("\nIt looks like " + Violin.getNumberOfViolins() + " violins have untuned.");
    for(int i = 0; i < simpleViolin.length; i++){
        output.print(i + 1);
        simpleViolin[i].tuneOff();
    }

    output.println("\nThis music is terrible! Let's stop it!");
    for(int i = 0; i < simpleViolin.length; i++){
        output.print(i + 1);
        simpleViolin[i].stopPlaying();
    }

        output.close();

    }

    catch (IOException io){

        System.out.println("Sorry that file is not found " + io);

    }
  }//end if

   }//end main

}//end Test

class Violin{
private final int numberOfStrings = 4;
private final char[] stringNames = {'E', 'A', 'D', 'G'};
private boolean isTuned = false;
private boolean isPlaying = false;
private static int numberOfViolins = 0;
private PrintWriter output;

public Violin(){
    numberOfViolins++;
}

public void startPlaying() {
    isPlaying = true;
    System.out.println(" violin is now playing.");
}

public void stopPlaying() {
    isPlaying = false;
    System.out.println(" violin has stopped playing.");
}

public void tuneOn() {
    isTuned = true;
    System.out.println(" violin is now tuned.");
}

public void tuneOff() {
    isTuned = false;
    System.out.println(" violin is untuned.");
} 

static int getNumberOfViolins(){
    return numberOfViolins;
}
}//end class Violin

所以我的问题是如何让我的Violin类方法打印到用户指定的文件?

1 个答案:

答案 0 :(得分:0)

当您创建Violin对象时,您可以将输出作为参考传递给构造函数,因此在小提琴中您将使用输出而不是System.out.println。

将Violoin构造函数更改为:

public Violin (PrintStream output){
    this.output = output;
}

然后只需使用小提琴内的outpu。