【问题标题】:Trying to read a file into an array java试图将文件读入数组java
【发布时间】:2014-04-13 11:40:27
【问题描述】:

我正在尝试将文件读入数组,但它似乎在这里不起作用是我的代码

public static void main(String[] args) throws FileNotFoundException {
    Scanner input = new Scanner(new File("Sales.txt"));
    int lineCount = 0;
    String line = "";
    while (input.hasNextLine()) {
        line = input.nextLine();   // read one line 
        lineCount++; //count line to find out how big array must be
        // System.out.println(line);
    }

    String[] fileinput = new String[lineCount]; //create array to store file in


    while (input.hasNextLine()) {
        int i = 0;
        fileinput[i] = input.nextLine();
        System.out.println(fileinput[i]);
        i++;

    }

我使用第一部分来找出有多少行,以便我可以将我的数组指定为那个大小,然后尝试在我的第二部分中将每一行放入数组中。

但每次它似乎不想在第一次使用该文件后再次读取或使用该文件时,它都会返回为 null。

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: java


    【解决方案1】:

    您需要将i 的声明移到while 循环之外并重新启动以从头开始读取文件。

    input = new Scanner(new File("Sales.txt"));
    int i = 0,
    while (input.hasNextLine()) 
            fileinput[i] = input.nextLine();
            System.out.println(fileinput[i]);
            i++;
    }
    

    您还可以使用List 来避免对文件进行两次迭代并使用readAllLines(如果您使用的是Java 7)。

    File f = new File("Sales.txt");
    Charset ch = //encoding of the file
    List<String> allLines = Files.readAllLines(f.toPath(), ch);
    

    【讨论】:

    • 您好 ZouZou,谢谢,我刚刚尝试过,但似乎仍然无法正常工作。数组中的所有单元格仍然显示为 null。
    • @Chris 你也需要重置扫描仪。
    • 啊,就是这样,我没有意识到每次都是我所有问题的原因时我都需要重置扫描仪:)
    【解决方案2】:

    第二个循环你必须从头开始启动扫描器:

    String[] fileinput = new String[lineCount];之后添加以下内容

    input = new Scanner(new File("Sales.txt"));
    

    你必须在第二个循环之外声明i

    【讨论】:

    • 邹邹,我还没看到你的答案,我才回答。对不起。
    • 您好 halal48,感谢您和 ZouZou 帮助我找到每次重置扫描仪所需的答案 :)
    【解决方案3】:

    你需要在while之前初始化int i,因为每次进入循环都会初始化为0,所以没有使用增量i。

    while (input.hasNextLine()) {
        int i = 0;
        fileinput[i] = input.nextLine();
        System.out.println(fileinput[i]);
        i++;
    
    }
    

    修改了你的代码

    int i = 0;
    while (input.hasNextLine()) {
            fileinput[i] = input.nextLine();
            System.out.println(fileinput[i]);
            i++;
    }
    

    【讨论】:

    • 谢谢我确实错过了这个信息:)
    【解决方案4】:

    给你:

    String[] fileinput = (new Scanner( new File("Sales.txt") ).useDelimiter("\\A").next()).split("[\\r\\n]+");
    

    这是将文件中的行保存到字符串数组中的单行器。

    请记住,您不需要计算行数和所有其他减速度变量。即,您的整个代码只能被这一行替换。

    这是你需要的吗?

    【讨论】:

    • 空行的字符串呢?此拆分会将一系列\r\n\r\n... 视为一个令牌,使foo\r\n\r\nbarfoo\r\nbar 相同。
    • @Pshemo 我认为这个要求也需要添加到问题中,否则这个解决方案已经足够好了,我一直在使用它,它是对所提问题的完整答案。如果您不介意,您能否进行编辑以在我的回答中提及这些限制。
    • 谢谢,这对我来说有点超出了我的能力,因为我才刚学 Java 的第一年,但很高兴知道它可以减少。
    • @Chris 不客气。不,不是:) 只需将此行添加到您的 IDE 中并运行以查看结果。我也是Java初学者。
    • @Chris 如果您正在寻找读取文件内容的简洁方法,请查看Files.readLines(path); 现在对您来说唯一的问题是这将返回行的List,而不是数组,但是您应该很快就会习惯动态集合。
    【解决方案5】:

    执行此操作的简单方法是将行读取到列表,然后将其转换为数组,如此处所做 Java: Reading a file into an array

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多