【问题标题】:Java: Help outputting to a file?Java:帮助输出到文件?
【发布时间】:2014-11-07 21:37:35
【问题描述】:

为一个类处理 Java 项目。教授希望我们输出到一个文件,这是我以前从未做过的。 指示: 创建 program1.states.in.out 并在提交项目时将其包含在项目文件夹中。
此文件不会像第 3 步中显示的输出那样出现。它仅包含 未格式化的数据行(没有间隔;没有标题……)。那么,输出文件将包含 50 仅数据线。在第 6 步中,您将需要这个创建的副本再次输入。所以 确保其格式正确。它看起来像:

Texas          Austin         TX19759614Southwest      5
New_Mexico     Santa_Fe       NM 1736931Southwest      5
Arizona        Phoenix        AZ 4668631Southwest      5

这看起来与他的输入文件中的结构相同。但是我已经对其进行了修剪/解析以填充 State 数组。我如何将其恢复为这种格式,然后将其输出到文件中?

用于从输入文件中修剪/解析的代码(在主文件中):

inputString = br1.readLine();
        while (inputString != null) {
            stateName = inputString.substring(0, 15).trim();
            stateCapital = inputString.substring(15, 30).trim();
            stateAbbrev = inputString.substring(30, 32).trim();
            statePop = Integer.parseInt(inputString.substring(32, 40).trim());
            stateRegion = inputString.substring(40, 55).trim();
            stateRegionNum = Integer.parseInt(inputString.substring(55));
            Sdriver.insert(stateName, stateCapital, stateAbbrev, statePop, stateRegion, stateRegionNum);
            inputString = br1.readLine();    // read next input line.
        }
        br1.close();     //Close input file being read

这就是 State.class。

public class State {
   private String stateName;    
   private String stateCapital;
   private String stateAbbrev;
   private int statePop;
   private String stateRegion;
   private int stateRegionNum;
   public static final String HEADER_STRING = "\n%-15s  %-15s  %-4s  %-10s  %-15s  %-8s\n\n";
   private static final String DISPLAY_STRING = "%-15s  %-15s  %-4s  %,10d  %-15s  %1d";

    public State(String name, String capital, String abbrev, int pop, String region, int regionNum) {
      stateName = name;
      stateCapital = capital;
      stateAbbrev = abbrev;
      statePop = pop;
      stateRegion = region;
      stateRegionNum = regionNum;
      }//End State

   public void displayState(int nElems, State myState[]) {
      System.out.print(String.format(State.HEADER_STRING, "State", "Capital", "Abbr", "Population", "Region", "Region #"));

        for(int x = 0; x < nElems - 1; x++) {
            System.out.println(myState[x].toString());
       } 
   }//End displayState

编辑:我尝试输出的代码。

String file = "src/program1.states.in.out.txt";
            BufferedWriter writer = new BufferedWriter(new FileWriter("src/program1.states.in.out.txt")); {
            for(int x = 0; x < Sdriver.getnElems(); x++) {
                writer.write(Sdriver.getState(x).toString());
            }
        }

创建了一个文件,但该文件是空的。

【问题讨论】:

  • 您的输入读数对我来说似乎太复杂了。我自己,我只是用"\s+" 之类的东西分割每一行。对于输出,您将使用 displayState 方法创建要写入文件的字符串。在寻求我们的帮助之前,您应该先自己尝试一下。
  • 这个问题似乎是题外话,因为你还没有发布你首先解决这个问题的尝试,如果我们要看看你可能做错了什么,这是必要的。
  • 谢谢。如果你将 BufferedWriter 包装在一个 PrintWriter 对象中,比如说 printWriter,然后简单地将 for 循环的内部部分更改为 printWriter.println(Sdriver.getState(x).displayState());
  • 我需要传递一个 int 和 State[]。但它不会接受 nElems 或 myState,因为这些变量位于另一个类 StateCollection 中。
  • 这些是您必须自己解决的细节。您必须将引用从一个类传递到另一个类,但我相信您会弄清楚如何做到这一点。

标签: java arrays netbeans java-io


【解决方案1】:

你看起来从这个开始还不错:

String file = "src/program1.states.in.out.txt";
    BufferedWriter writer = new BufferedWriter(new FileWriter("src/program1.states.in.out.txt")); {
    for(int x = 0; x < Sdriver.getnElems(); x++) {
        writer.write(Sdriver.getState(x).toString());
    }
}

但请考虑改用 PrintWriter 对象和displayState() 方法。类似于:

PrintWriter printWriter = null;
try {
    String filePath = "src/program1.states.in.out.txt";
    writer = new BufferedWriter(new FileWriter(filePath));
    PrintWriter printWriter = new PrintWriter(writer);
    for(int x = 0; x < Sdriver.getnElems(); x++) {
        printWriter.println(Sdriver.getState(x).displayState());
    }
} catch (IOException ioE) {
    ioE.printStackTrace();
} finally {
    if (printWriter != null) {
        printWriter.close();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-15
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多