如何读取文件,然后将每个文件整数分配给数组列表? 导入java.io.File; 导入java.util.ArrayList; 导入java.util.Scanner; 公共类不工作{ 公共静态void main(字符串[]args)引发异常{ //我需要打开的文件 //它们包含整数(图形上的点) //例:74 0 80 100 150 60 150 字符串[]名称={“Test.txt”、“Test2.in”、“test3.in”、“Test4.in”、“Test5.in”}; //创建5个列表 ArrayList[]textFiles=新建ArrayList[5]; //for循环遍历每个文件 for(int i=0;i

如何读取文件,然后将每个文件整数分配给数组列表? 导入java.io.File; 导入java.util.ArrayList; 导入java.util.Scanner; 公共类不工作{ 公共静态void main(字符串[]args)引发异常{ //我需要打开的文件 //它们包含整数(图形上的点) //例:74 0 80 100 150 60 150 字符串[]名称={“Test.txt”、“Test2.in”、“test3.in”、“Test4.in”、“Test5.in”}; //创建5个列表 ArrayList[]textFiles=新建ArrayList[5]; //for循环遍历每个文件 for(int i=0;i,java,arrays,arraylist,file-io,nullpointerexception,Java,Arrays,Arraylist,File Io,Nullpointerexception,我需要打开以数组形式给出的文件(.txt和.in)。我使用for循环遍历它们,然后打开它们,但是当我读取它们时,我想使用它们中的数据。所以我的想法是创建5个数组列表并将数据放入其中。但我似乎不明白。它总是给我一个空指针异常。此外,我需要能够将数据放入另一个方法中。例如“Quad(ax,ay,bx,by,cx,cy,dx,dy)”,每个文件都有我需要的坐标。数组列表是实现它的最佳方法吗 您的代码级别非常低-这将为您提供一些“起点”来处理更有用的抽象: 但是,将所有文件中的所有行读入单个列表可能会容

我需要打开以数组形式给出的文件(.txt和.in)。我使用for循环遍历它们,然后打开它们,但是当我读取它们时,我想使用它们中的数据。所以我的想法是创建5个数组列表并将数据放入其中。但我似乎不明白。它总是给我一个空指针异常。此外,我需要能够将数据放入另一个方法中。例如“Quad(ax,ay,bx,by,cx,cy,dx,dy)”,每个文件都有我需要的坐标。数组列表是实现它的最佳方法吗

您的代码级别非常低-这将为您提供一些“起点”来处理更有用的抽象:

但是,将所有文件中的所有行读入单个
列表
可能会容易得多(假设所有文件都具有相同的格式)

这一点可以很容易地通过

除非这是家庭作业,你被要求“手动”完成所有这些;你真的应该依赖这样高层次的抽象。实施已经存在的东西没有多大意义。不这样做的另一个原因是,如果您谈论的是巨大的文件;因此,您只需要在同一时间点将所有这些行存储在内存中

即使您不使用readAllLines一次性读取所有文件;您仍然可以使用该方法在一个快照中一个接一个地读取文件

无论你如何收集你的信息;然后有一个包含原始数据的
列表
;现在可以用来轻松匹配这些字符串中的数字;然后使用Integer.parseInt()将其转换为int。简单示例:

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class NotWorking {   
    public static void main(String[] args) throws Exception{
        // The files that I need to open
        // They contain integers (points on a graph)
        // Ex: 74 0 80 100 150 60 150
        String[] names = {"Test.txt", "Test2.in", "test3.in", "Test4.in", "Test5.in"};
        // Create 5 list
        ArrayList<Integer>[] textFiles = new ArrayList[5];

        // for loop through each file
        for (int i = 0; i < names.length; i++) {
            Scanner scanner;
            // open file
            scanner = new Scanner(new File(names[i]));
            // @fileNumber is one of 5 list
            int fileNumber = 0;
            // add each integer to the correct list
            while (scanner.hasNextInt()){
            // line below this is where it says NullPointer Exception
            textFiles[fileNumber].add(scanner.nextInt());       
            }enter code here
            // Trying to see if lists are made correctly and also increasing fileNumber after
            // each file is processed
            System.out.println(textFiles[fileNumber]);
            fileNumber ++;      
        }   
    }
    }

您的代码级别非常低-这将为您提供一些“起点”来处理更有用的抽象:

但是,将所有文件中的所有行读入单个
列表
可能会容易得多(假设所有文件都具有相同的格式)

这一点可以很容易地通过

除非这是家庭作业,你被要求“手动”完成所有这些;你真的应该依赖这样高层次的抽象。实施已经存在的东西没有多大意义。不这样做的另一个原因是,如果您谈论的是巨大的文件;因此,您只需要在同一时间点将所有这些行存储在内存中

即使您不使用readAllLines一次性读取所有文件;您仍然可以使用该方法在一个快照中一个接一个地读取文件

无论你如何收集你的信息;然后有一个包含原始数据的
列表
;现在可以用来轻松匹配这些字符串中的数字;然后使用Integer.parseInt()将其转换为int。简单示例:

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class NotWorking {   
    public static void main(String[] args) throws Exception{
        // The files that I need to open
        // They contain integers (points on a graph)
        // Ex: 74 0 80 100 150 60 150
        String[] names = {"Test.txt", "Test2.in", "test3.in", "Test4.in", "Test5.in"};
        // Create 5 list
        ArrayList<Integer>[] textFiles = new ArrayList[5];

        // for loop through each file
        for (int i = 0; i < names.length; i++) {
            Scanner scanner;
            // open file
            scanner = new Scanner(new File(names[i]));
            // @fileNumber is one of 5 list
            int fileNumber = 0;
            // add each integer to the correct list
            while (scanner.hasNextInt()){
            // line below this is where it says NullPointer Exception
            textFiles[fileNumber].add(scanner.nextInt());       
            }enter code here
            // Trying to see if lists are made correctly and also increasing fileNumber after
            // each file is processed
            System.out.println(textFiles[fileNumber]);
            fileNumber ++;      
        }   
    }
    }

在使用ArrayList之前,需要为其分配内存

这就是它将NullPointerException作为文本文件[0]抛出的原因,。。。为null,并且您正在尝试对null执行操作

String toQuad(int a, int b, ....... ) {
  return "Quad(" + a +"," + b ...
textFiles[fileNumber]=newarraylist();
//如上所述调用构造函数为每个单独的ArrayList分配内存。
而(scanner.hasnetint()){
textFiles[fileNumber].add(scanner.nextInt());
}

在使用ArrayList之前,需要为其分配内存

这就是它将NullPointerException作为文本文件[0]抛出的原因,。。。为null,并且您正在尝试对null执行操作

String toQuad(int a, int b, ....... ) {
  return "Quad(" + a +"," + b ...
textFiles[fileNumber]=newarraylist();
//如上所述调用构造函数为每个单独的ArrayList分配内存。
而(scanner.hasnetint()){
textFiles[fileNumber].add(scanner.nextInt());
}

您仅为包含ArrayList创建了一个数组。你还没有创建任何数组列表,但是你还没有创建5个数组列表。您尚未创建任何数组列表。您创建的是一个长度为5的空数组,类型为array list。您只创建了一个用于包含ArrayList的数组。你还没有创建任何数组列表,但是你还没有创建5个数组列表。您尚未创建任何数组列表。您创建的是一个长度为5的空数组,类型为array list。它们的格式都相同,但都包含整数。我是Java新手,所以这可能是一个愚蠢的问题,但所有文件都包含图形上的点。所以它们必须是整数。我会只做列表而不是列表吗?另外,我如何从列表中提取数据,以便在方法中使用它?这已经在我更新的答案中。不,更改列表类型不会神奇地将字符串转换为数字。你必须为此编写代码。它们都是t