【问题标题】:How to read data from file into an array?如何将文件中的数据读入数组?
【发布时间】:2015-04-08 11:37:20
【问题描述】:

我的目标:将文件中的每条数据放入一个数组中。然后将该数组传递给 main 方法,这样我就可以调用我需要的任何数据,并在必要时附加它。

我现在在哪里:我已经创建了文件及其内容并将它们放入一个数组中。当我尝试从我的 main 方法调用和打印数组时,我得到 [Ljava.lang.String;@6dd4ea6c 这是什么?为什么不让我将数组打印到控制台?

帮助?

我的代码:

   /**
Add in javadoc comments
*/


//import statements
    import java.io.*;
    import java.util.Scanner;
    import java.util.ArrayList;

public class Try { 

    public static void main(String[] args){
        fileSetUp();
        System.out.println(fileSetUp());
    }

    public static void createFile(){
        //create file holding inventory information
        try{
            PrintWriter outputFile = new PrintWriter("inventory.txt");
            outputFile.println("3000.0");
            outputFile.println("Lamps 15.3 400");
            outputFile.println("Chairs 19.95 250");
            outputFile.print("Desks 95.0 300");
            int i =0;
            outputFile.close();
        }
        catch(IOException e){
        System.out.println("File cannot be created."); //?????
        }
    }
    public static String[] fileSetUp(){
        //load the file information
        String[] data = new String[10];
        try{
            File file = new File("inventory.txt");
            Scanner inFile = new Scanner(file);
            for(int i=0; i<data.length; i++){
                data[i] = (inFile.next());
            }
            inFile.close();
        }
        catch(FileNotFoundException e){
            System.out.println("Cannot find file.");
        }
        return data;
    }
}

【问题讨论】:

  • array 没有名为“add”的方法并将“data”声明放在 try 块之外,如果要向数组添加元素,请使用 data[i]=inFile.next 赋值()。
  • 使用 java.nio.file 和 Files.readAllLines(),你的工作会轻松很多
  • 这个“java.lang.String;@6dd4ea6c”表示你的内存位置。使用 toString() 方法获取数组中的值。

标签: java arrays string file input


【解决方案1】:

由于您的数据是面向行的,因此采用“简单的方法”:

public static String[] getDataFromFile(final String filename)
    throws IOException
{
    final Path path = Paths.get(filename);
    final List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
    return lines.toArray(new String[lines.size()]);
}

或者只使用List 而不是数组。


至于:

当我尝试从我的 main 方法调用和打印数组时,我得到 [Ljava.lang.String;@6dd4ea6c

这是一个数组的字符串表示形式。

如果需要元素,请使用数组的 Arrays.toString()。或者,再次使用 List

【讨论】:

    【解决方案2】:

    Java 中的数组是对象,但它们不会覆盖toString() 方法。因此,当您尝试打印它们时,您会得到toString() 的默认实现,它本质上是对象类型及其hashCode() 的串联。要正确打印,您可以使用Arrays.toString(Object[]):

    public static void main(String[] args){
        String[] arr = fileSetUp();
        System.out.println(Arrays.toString(arr));
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-03
      • 2015-12-02
      • 2013-04-11
      • 2012-12-05
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      相关资源
      最近更新 更多