使用java类将数据写入txt文件文件

时间:2014-03-10 01:53:02

标签: java

我试图理解为什么我的代码没有将输出写入文本文件,因为我希望它能够正常工作。我的程序将文件名作为命令行参数,并将一些文本打印到文件和屏幕。它有点复杂,因为它使用类和对象来演示对象的工作方式。任何人都可以帮助破译为什么它不写入文件?这是我的代码: -

public class Mamoonp3test {

    public static void main(String[] args) throws Exception {

        //Create array of 10 guitar (Mamoonp3) objects
        final int NUMBER_OF_INSTANCES = 10;
        Mamoonp3[] objectNames = new Mamoonp3[NUMBER_OF_INSTANCES];

        try 
        {       
            String fileName = new String(args[0]);

            for(int i=0; i<NUMBER_OF_INSTANCES; i++) {
                objectNames[i] = new Mamoonp3(FileName);
                System.out.println("This is guitar number: " + i);
                objectNames[i].tuneGuitar();
                objectNames[i].playGuitar();
                objectNames[i].displayAcronym();
                objectNames[i].stopGuitar();
                System.out.println("---------------------------");
                }
        }
        catch (Exception e)
        {
            System.out.println("please provide an input file");
            System.out.println("Usage: java Mamoonp3test filename.txt");
        }
    }

}

import java.io.*;

public class Mamoonp3 {

    final int NUMBER_OF_STRINGS = 6;
    char[] stringNames = {'E','A','D','G','B','E'};
    int[] stringNumbers = {6,5,4,3,2,1};
    String[] stringPitch = {"Sixth","Fifth","Fourth","Third","Second","First"};

    boolean isTuned;
    boolean isPlaying;
    String stringAcronym = new String("Even After Dinner Giant Boys Eat");

    //create a PrintWriter for output
    PrintWriter output;

    public Mamoonp3(String fileName) throws Exception{
        isTuned = false;
        isPlaying = false;
        // create target file
        File targetFile = new File(fileName);
        //create a PrintWriter for output
        output = new PrintWriter(targetFile);
    }

    public void tuneGuitar() {
        System.out.println("The guitar is now tuned.");
        for (int i=0; i<NUMBER_OF_STRINGS; i++) {
            System.out.println(stringNames[i] + " is string number " + stringNumbers[i] + " and ranked " + stringPitch[i] + " in pitch");
            output.print(stringNames[i] + " is string number " + stringNumbers[i] + " and ranked " + stringPitch[i] + " in pitch");
            output.close();
        }
    }

    public void playGuitar() {
        System.out.println("The guitar is now playing.");
        output.print("The guitar is now playing.");
        output.close();
    }

    public void stopGuitar() {
        System.out.println("The guitar is now stoped.");
        output.print("The guitar is now stoped.");
        output.close();
    }

    public void displayAcronym() {
        System.out.println("Always remember your string names!");
        System.out.println("Heres a reminder: " + stringAcronym);
        output.print("Always remember your string names!");
        output.print("Heres a reminder: " + stringAcronym);
        output.close();
    }

}

1 个答案:

答案 0 :(得分:2)

你正在设置一个对象的文件,你随后什么都不做,你没有写,

Mamoonp3 newObject = new Mamoonp3(fileName);

...而不是在您尝试编写的对象中设置文件。检查您正在使用的构造函数:在for循环中创建的每个Manoop3对象。要查看是这样,请检查您正在使用的构造函数

我建议你完全改变你的方法。

  • 获取Mamoonp3课程的所有文件输入和输出 out
  • 相反,该课程应该关注表达乐器的状态,而不是别的。
  • 为课程提供一个不错的toString()覆盖方法。
  • I&amp; O应该在另一个独立的类中去其他地方。
  • 为您的I&amp; O类提供一种方法,允许您将Mamoonp3对象传递给它,以便可以编写它们。
  • 顺便说一句,你几乎不会使用new String(anything)。只需使用args[0]
  • 写完后始终关闭PrintWriter。这可能会导致您的错误。

修改

可能是解决这个问题的另一种方法:

  • 在main方法中创建一个PrintWriter对象。
  • 为您的Manoop3类提供一个PrintWriter字段和一个构造函数,该构造函数接受此PrintWriter并使用它设置其字段。
  • 使用Manoop3中的PrintWriter进行编写,但不要将其关闭。
  • 当所有Manoop3对象完成对它的使用时,在main方法中关闭PrintWriter。