【问题标题】:How do I write String arrays to a text file in java using Printwriter?如何使用 Printwriter 将字符串数组写入 java 中的文本文件?
【发布时间】:2015-04-20 14:29:08
【问题描述】:

我需要帮助将数组对象的一些内容(以下是我正在使用的两个数组示例)写入使用 Printwriter 的文本文件。有任何想法吗?我是初学者,越简单越好,谢谢!

Astronauts[0][0] = new Passengers(-1, "", 1, 0, 0, "", "", 0, "", "", "", "", ""); 

Astronauts[0][1] = new Passengers(0, "Pilot", 2424, 14, 0, "Bruce", "Banner", 0, "678-884-6325", "Mom", "678-884-6323","","");

Astronauts[0][2] = new Passengers(0, "Pilot", 1248, 3, 0, "Sally", "Forth", 0, "678-921-1135", "Hannah", "678-921-1130","","");


 Astronauts[1][0] = new Passengers(-1, "", 2, 0, 0, "", "", 0, "", "", "", "", "");

Astronauts[1][1] = new Passengers(0, "Pilot", 1022, 55, 0, "Buz", "Aldrin", 0, "404-014-4553", "June", "404-014-4555","","");

Astronauts[1][2] = new Passengers(0, "Pilot", 2813, 8, 0, "Alice", "Dyer", 0, "678-884-6325", "Mom", "678-884-6323","","");

【问题讨论】:

    标签: java arrays string file text


    【解决方案1】:

    我不确定我是否正确地发现了您的问题,因为将数组的内容写入文件非常简单:

    String[] arr = {"a", "b", "c"};
    try {
        PrintWriter pw = new PrintWriter(new FileWriter("output.txt"));
        pw.println(Arrays.toString(arr));
        pw.flush();
        System.out.println("Finished");
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    [编辑]

    我意识到我可能没有解决您的全部问题。如果您想知道如何编写包含在数组中的 objects 所需的特征,您可以覆盖自定义类的 toString() 方法:

    class A {
        public static void main(String[] args) {
            B[] bs = {new B("a", "b"),
                      new B("c", "d"),
                      new B("e", "f"),
                      new B("g", "h")};
    
            try {
                PrintWriter pw = new PrintWriter(new FileWriter("output.txt"));
                for (B b : bs) {
                    pw.println(b);
                }
                pw.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("Finished");
        }
    }
    
    class B {
        private String prop1;
        private String prop2;
    
        public B (String prop1, String prop2) {
            this.prop1 = prop1;
            this.prop2 = prop2;
        }
    
        @Override
        public String toString() {
            return this.prop1 + " " + this.prop2;
        }
    }
    

    【讨论】:

      【解决方案2】:

      由于您的数组内容都属于同一类 Passengers,如果您对默认的 Array.toString 格式不满意,我将在 Passengers 中创建一个 toString() 方法,该方法返回您所需的字符串表示形式。

      然后:

      try {
             PrintWriter printWriter = new PrintWriter(new FileWriter("output.txt"));
      
             for(Passengers[] passengers: Astronauts) {
                 for(Passengers passenger: passengers) {
                      printWriter.println(passenger);
                 }
             }
      
             printWriter.close();  // no need to flush, since close() does it anyway.
      
         } catch (IOException e) {
             e.printStackTrace();
         }
      

      注意:正如其他人所提到的,我将Astronauts 变量重命名为小写astronauts。我还将Passengers 类重命名为Passenger

      编辑:使用上面的代码,输出文件应该出现在运行程序的工作目录中。或者,您可以提供完整的文件路径,例如 C:/Users/Me/directory/output.txt,但在这种情况下,您需要确保目录路径已经存在。

      另一种选择是修改代码以自动为您创建路径:

          File file = new File ("C:/Users/Me/directory/output.txt");
          file.getParentFile().mkdirs();
          PrintWriter printWriter = new PrintWriter(file);
      

      【讨论】:

      • 好的,所以我使用了这段代码,但将其调整为整个文件,但我仍然没有看到文本文件。不应该自己弹出一个吗?
      • 是的,上面的代码应该为您创建文件。我已经编辑了答案,并在这方面做了一些解释。希望对您有所帮助。
      【解决方案3】:

      您可能希望这样做。

      String twoDArray[][] = {{"one","two"},{"one","two"},{"one","two"}};
          String filePath = "C:/Users/arjun.lajpal/Desktop/dummyFile.txt";
          PrintWriter writer = null;
          try {
              writer = new PrintWriter(filePath);
          } catch (FileNotFoundException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      
          writer.printf("%20s%20s","Astraunauts","Passengers");
          writer.println();
          for(int i=0;i<twoDArray.length;i++){
              for(int j=0;j<twoDArray[i].length;j++)
                  writer.printf("%20s",twoDArray[i][j]);
      
              writer.println();
      
              }
          writer.flush();
          writer.close();
      

      这不仅会生成您的文件,还会以漂亮的表格格式写入文件,而无需重写 toString() 方法。

      【讨论】:

        【解决方案4】:

        PrintWriter 承认String,因此您可以覆盖Astronauts 类中的toString() 方法,然后遍历一维或二维数组:

        顺便说一句,变量名应该以小写字符开头。

        • 一维

          for (int i = 0; i < astronauts.length; i++) { 
              pw.print(Arrays.toString(astronauts[i]); 
          } 
          
        • 二维

          for (int i = 0; i < astronauts.length; i++) {
              for (int j = 0; j < astronauts[i].length; i++) {
                  pw.print(astronauts[i][j]); 
              } 
          } 
          

        别忘了flush()close() PrintWriter

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-18
          • 2017-09-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多