在Java中将文件读入数组
在Java中,我们可以通过使用扫描仪或 bufferedReader 或 FileReader 读取文件或使用 readAllLines 方法将文件的内容存储到数组中。为了更好地存储文件的内容,请使用集合存储类型而不是静态数组,因为我们不知道文件的确切行数或字数。然后根据需要将集合类型转换为数组。
- 至于读取文件的内容,首先我们需要创建一个包含一些文本的文件。让我们考虑以下文本存在于名为 file.txt 的文件中
Geeks,for
Geeks
Learning portal
读取文件内容并将其存储在数组中主要有 4 种方法。它们在下面提到 -
- 使用 BufferedReader 读取文件
- 使用扫描仪读取文件
- readAllLines() 方法
- 使用文件阅读器
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 我们将它们作为组合字符串获取。
Note: While reading the file, if the file is in same location where the program code is saved then no need to mention path just specify the file name. If the file is in a different location with respect to the program saved location then we should specify the path along with the filename.
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 指定任何分隔符方法,那么它将根据空格分隔字符串。
Note: There is another method called readAllLines present in Files class use to read the content of file line by line
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。
这些都是可以用来从文件中读取数据并将其存储在数组中的方法。