📜  在Java中将文件读入数组

📅  最后修改于: 2022-05-13 01:54:23.123000             🧑  作者: Mango

在Java中将文件读入数组

在Java中,我们可以通过使用扫描仪或 bufferedReader 或 FileReader 读取文件或使用 readAllLines 方法将文件的内容存储到数组中。为了更好地存储文件的内容,请使用集合存储类型而不是静态数组,因为我们不知道文件的确切行数或字数。然后根据需要将集合类型转换为数组。

  • 至于读取文件的内容,首先我们需要创建一个包含一些文本的文件。让我们考虑以下文本存在于名为 file.txt 的文件中
Geeks,for
Geeks
Learning portal

读取文件内容并将其存储在数组中主要有 4 种方法。它们在下面提到 -

  1. 使用 BufferedReader 读取文件
  2. 使用扫描仪读取文件
  3. readAllLines() 方法
  4. 使用文件阅读器

1.使用BufferedReader读取文件

这是开发人员编写代码以获取文件内容的最简单方法,它也是读取文件的首选方式,因为它使用的 char 缓冲区可以同时从字符输入中读取多个值,因此读取调用次数更少溪流。

句法:

BufferedReader bf=new BufferedReader (new FileReader(filename))

BufferedReader 还提供了一个名为 readLine 的方法,它将文件中的整行作为字符串。

下面是将文件内容存储在数组中的示例代码。

例子:

Java
// import necessary packages
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
public class GFG {
    // to handle exceptions include throws
    public static void main(String[] args)
        throws IOException
    {
        // list that holds strings of a file
        List listOfStrings
            = new ArrayList();
       
        // load data from file
        BufferedReader bf = new BufferedReader(
            new FileReader("file.txt"));
       
        // read entire line as string
        String line = bf.readLine();
       
        // checking for end of file
        while (line != null) {
            listOfStrings.add(line);
            line = bf.readLine();
        }
       
        // closing bufferreader object
        bf.close();
       
        // storing the data in arraylist to array
        String[] array
            = listOfStrings.toArray(new String[0]);
       
        // printing each line of file
        // which is stored in array
        for (String str : array) {
            System.out.println(str);
        }
    }
}


Java
// import necessary packages
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
public class GFG {
    // include throws to handle some file handling exceptions
    public static void main(String[] args)
        throws IOException
    {
        // arraylist to store strings
        List listOfStrings
            = new ArrayList();
       
        // load content of file based on specific delimiter
        Scanner sc = new Scanner(new FileReader("file.txt"))
                         .useDelimiter(",\\s*");
        String str;
       
        // checking end of file
        while (sc.hasNext()) {
            str = sc.next();
           
            // adding each string to arraylist
            listOfStrings.add(str);
        }
       
        // convert any arraylist to array
        String[] array
            = listOfStrings.toArray(new String[0]);
       
        // print each string in array
        for (String eachString : array) {
            System.out.println(eachString);
        }
    }
}


Java
// import necessary packages and classes
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
 
public class Box {
    // add throws to main method to handle exceptions
    public static void main(String[] args)
        throws IOException
    {
        List listOfStrings
            = new ArrayList();
       
        // load the data from file
        listOfStrings
            = Files.readAllLines(Paths.get("file.txt"));
       
        // convert arraylist to array
        String[] array
            = listOfStrings.toArray(new String[0]);
       
        // print each line of string in array
        for (String eachString : array) {
            System.out.println(eachString);
        }
    }
}


Java
// import necessary packages
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
class GFG {
    // to handle exceptions include throws
    public static void main(String[] args)
        throws IOException
    {
        // list that holds strings of a file
        List listOfStrings
            = new ArrayList();
       
        // load data from file
        FileReader fr = new FileReader("file.txt");
       
        // Created a string to store each character
        // to form word
        String s = new String();
        char ch;
       
        // checking for EOF
        while (fr.ready()) {
            ch = (char)fr.read();
               
            // Used to specify the delimiters
            if (ch == '\n' || ch == ' ' || ch == ',') {
               
                // Storing each string in arraylist
                listOfStrings.add(s.toString());
               
                // clearing content in string
                s = new String();
            }
            else {
                // appending each character to string if the
                // current character is not delimiter
                s += ch;
            }
        }
        if (s.length() > 0) {
           
            // appending last line of strings to list
            listOfStrings.add(s.toString());
        }
        // storing the data in arraylist to array
        String[] array
            = listOfStrings.toArray(new String[0]);
       
        // printing each line of file which is stored in
        // array
        for (String str : array) {
            System.out.println(str);
        }
    }
}


输出:

Geeks,for
Geeks
Learning portal

说明:在这段代码中,我们使用 BufferedReader 读取和加载文件的内容,然后使用 readLine 方法将文件的每一行作为字符串存储/添加到 ArrayList 中,最后我们将 ArrayList 转换为 Array使用 toArray 方法。

但是为了指定任何分隔符来分隔文件中的数据,在这种情况下,扫描仪会很有帮助。我们可以看到文件的第一行中有 2 个字符串,但是使用 BufferedReader 我们将它们作为组合字符串获取。

2.使用Scanner读取文件

扫描器主要用于从用户那里读取原始数据类型的数据。但即使是从文件中获取数据 Scanner 也可以与 File 或 FileReader 一起使用来加载文件的数据。此扫描器通常通过默认分隔符空间将标记分解为字符串,但即使我们也可以使用 useDelimiter 方法显式指定其他分隔符。

句法:

Scanner sc = new Scanner(new FileReader("filename")).useDelimiter("delimiter to separate strings");

扫描仪存在于 util 包中,我们需要在使用它之前导入它,它还提供 readLine() 和 hasNext() 来检查文件的结尾,即是否有任何可用的字符串可供读取。

下面是使用 Scanner 将文件内容存储在数组中的示例代码。

例子:

Java

// import necessary packages
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
public class GFG {
    // include throws to handle some file handling exceptions
    public static void main(String[] args)
        throws IOException
    {
        // arraylist to store strings
        List listOfStrings
            = new ArrayList();
       
        // load content of file based on specific delimiter
        Scanner sc = new Scanner(new FileReader("file.txt"))
                         .useDelimiter(",\\s*");
        String str;
       
        // checking end of file
        while (sc.hasNext()) {
            str = sc.next();
           
            // adding each string to arraylist
            listOfStrings.add(str);
        }
       
        // convert any arraylist to array
        String[] array
            = listOfStrings.toArray(new String[0]);
       
        // print each string in array
        for (String eachString : array) {
            System.out.println(eachString);
        }
    }
}


输出

Geeks
for
Geeks
Learning portal

说明:在这段代码中,我们使用 Scanner 来读取和加载文件的内容,这里可以灵活地使用 useDelimiter 方法指定分隔符,这样我们就可以根据分隔符分隔字符串,并且每个字符串都根据分隔符分隔分隔符存储/添加在 ArrayList 中,我们可以使用 hasNext 方法检查 EOF。最后,我们使用 toArray 方法将该 ArrayList 转换为 Array。

当我们将分隔符值指定为“,” (逗号)时,我们得到了 2 个分隔的字符串geeks 和 for。如果我们没有为 Scanner 指定任何分隔符方法,那么它将根据空格分隔字符串。

3. readAllLines() 方法

要首先使用它,我们需要从文件包中导入文件和路径类。使用这种方法的好处是它减少了获取和存储数据的代码行数。下面提到了它的语法 -

FIles.readAllLines(Paths("filename"))

下面是使用 readAllLines 方法加载文件内容并将其存储在数组中的代码。

例子:

Java

// import necessary packages and classes
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
 
public class Box {
    // add throws to main method to handle exceptions
    public static void main(String[] args)
        throws IOException
    {
        List listOfStrings
            = new ArrayList();
       
        // load the data from file
        listOfStrings
            = Files.readAllLines(Paths.get("file.txt"));
       
        // convert arraylist to array
        String[] array
            = listOfStrings.toArray(new String[0]);
       
        // print each line of string in array
        for (String eachString : array) {
            System.out.println(eachString);
        }
    }
}

输出

Geeks,for
Geeks
Learning portal

说明:这里我们使用 readAllLines 方法来获取文件中的每一行并返回一个字符串列表。使用 toArray 方法将此列表转换为数组。

4. 使用文件阅读器

使用 FileReader,我们可以加载文件中的数据,并可以从 FileReader 对象读取字符数据。在程序中使用 FIleReader 之前,我们需要从 io 包中导入 FileReader 类。

句法:

FileReader filereaderObj=new FileReader("filename");

让我们看看下面的示例代码,它从文件中读取数据并使用 FileReader 将其存储在数组中。

例子:

Java

// import necessary packages
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
class GFG {
    // to handle exceptions include throws
    public static void main(String[] args)
        throws IOException
    {
        // list that holds strings of a file
        List listOfStrings
            = new ArrayList();
       
        // load data from file
        FileReader fr = new FileReader("file.txt");
       
        // Created a string to store each character
        // to form word
        String s = new String();
        char ch;
       
        // checking for EOF
        while (fr.ready()) {
            ch = (char)fr.read();
               
            // Used to specify the delimiters
            if (ch == '\n' || ch == ' ' || ch == ',') {
               
                // Storing each string in arraylist
                listOfStrings.add(s.toString());
               
                // clearing content in string
                s = new String();
            }
            else {
                // appending each character to string if the
                // current character is not delimiter
                s += ch;
            }
        }
        if (s.length() > 0) {
           
            // appending last line of strings to list
            listOfStrings.add(s.toString());
        }
        // storing the data in arraylist to array
        String[] array
            = listOfStrings.toArray(new String[0]);
       
        // printing each line of file which is stored in
        // array
        for (String str : array) {
            System.out.println(str);
        }
    }
}

输出

Geeks
for
Geeks
Learning
portal

说明:在这段代码中,我们使用 FileReader 从其对象中的文件加载数据。该对象将数据保存为字符流,我们可以逐个字符字符从中获取数据。因此,我们将每个字符存储在一个字符串中,如果提取的字符是任何分隔符,即在 if 语句 [\n, (space) ' ', (comma) ','] 中指定,那么我们将该字符串存储在 ArrayList 中并清除内容如果不是,则在字符串中将该字符附加到字符串。像这样,我们将文件中的所有字符串存储到 ArrayList 中,然后将其转换为 Array。

这些都是可以用来从文件中读取数据并将其存储在数组中的方法。