(Java)将文本文件中的内容存储到数组中时,打印数组的输出都为空
我是Java新手,最近有一个任务涉及数组。这只是它的第一部分,我试图将文件中的内容存储到数组中,但结果是[null,null,null……]。我尝试过使用这些(Java)将文本文件中的内容存储到数组中时,打印数组的输出都为空,java,arrays,eclipse,null,filereader,Java,Arrays,Eclipse,Null,Filereader,我是Java新手,最近有一个任务涉及数组。这只是它的第一部分,我试图将文件中的内容存储到数组中,但结果是[null,null,null……]。我尝试过使用这些String[]array=list.toArray(新字符串[count]) List List=new ArrayList()但它不起作用,在stackoverflow中搜索,找到了类似于上面和下面的在数组中存储内容的方法的示例,但仍然希望您能告诉我实际发生了什么,这样我就可以调试它了。多谢各位 内容示例: 3 123 456 789
String[]array=list.toArray(新字符串[count])代码>
List List=new ArrayList()代码>
但它不起作用,在stackoverflow中搜索,找到了类似于上面和下面的在数组中存储内容的方法的示例,但仍然希望您能告诉我实际发生了什么,这样我就可以调试它了。多谢各位
内容示例:
3
123
456
789
我需要将它保存为字符串,因为它在作业中是一个很长的数字
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
public class Array {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
FileReader theFile = new FileReader("path of the file");
BufferedReader readFile = new BufferedReader(theFile);
String content;
String lineInFile = readFile.readLine();
int count = 0;
while(lineInFile != null)
{
count++;
lineInFile = readFile.readLine();
}
System.out.println(count);
String[] array = new String[count];
for(int o = 0; o < count; o++)
{
content = lineInFile + "";
lineInFile = readFile.readLine();
array[o] = lineInFile;
}
System.out.println(Arrays.toString(array));
导入java.io.FileReader;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入java.util.Scanner;
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileNotFoundException;
公共类数组{
公共静态void main(字符串[]args)引发异常{
//TODO自动生成的方法存根
FileReader theFile=新的FileReader(“文件路径”);
BufferedReader readFile=新的BufferedReader(文件);
字符串内容;
字符串lineInFile=readFile.readLine();
整数计数=0;
while(lineinfle!=null)
{
计数++;
lineInFile=readFile.readLine();
}
系统输出打印项次(计数);
字符串[]数组=新字符串[计数];
对于(int o=0;o
您正在调用Readline并一遍又一遍地重写对象lineInFile
在这里:
你应该把这个放进冰箱里
array[o] = lineInFile;
不要使用o而是使用countvariable它不起作用,因为代码的第一部分读取了文件中的所有行,以便初始化count
变量:
String lineInFile = readFile.readLine();
int count = 0;
while(lineInFile != null)
{
count++;
lineInFile = readFile.readLine();
}
…并为数组指定大小
String[] array = new String[count];
现在,在将文件内容加载到数组之前,需要重置文件缓冲区,因此需要插入此行:
readFile.reset();
在此之前:
for(int o = 0; o < count; o++)
{
content = lineInFile + "";
lineInFile = readFile.readLine();
array[o] = lineInFile;
}
for(int o=0;o
content
变量声明和初始化似乎没用,您可以删除
编辑:@marks建议您在重置方法之前插入以下内容:
readFile.mark(0);
readFile.reset();您可以使用lines()
-方法从readFile
获取所有行
String[] array = readFile.lines().toArray()
所以你不需要自己数数和阅读
您还可以使用文件
-类
String[] array = (String[])Files.readAllLines(Paths.get("path to file")).toArray();
为了澄清这一点,while循环一直循环,直到readFile到达文件的末尾(readline()返回null)。然后在第二个循环中,由于readFile已经在文件的末尾,readline()返回将只返回null,因此数组中充满了null웃 Пepeúpaツ's的解决方案更好。我尝试运行此操作,但它给我以下错误java.lang.ArrayIndexOutOfBoundsException:0,在调试过程中多次出现。感谢您的快速响应!int count=0;String[]array=new String[count];while(lineinfle!=null){content=lineinflee+“”;array[count]=内容;计数+++;}@标记我认为您需要知道缓冲区大小才能初始化数组。这是第一个while循环的目的。我认为在使用count
变量指定的大小初始化数组之前,您不能为数组分配任何缓冲行。否则,您将获得@chloe.t报告的ArrayIndexOutOfBoundsException
。@chloe.t Paolo是正确的,因此如果必须使用数组(而不是列表,或者更好的是使用StringBuffer,因为您以字符串结尾),则需要调用readFile.close(),然后readFile=new BufferedReader(theFile);在开始时重新创建StringBuffer。@马克谢谢您的解释!现在对我有效!这将有效,但您需要在读取第一行之前调用readFile.mark(),否则您将获得readFile.reset()的详细信息
String[] array = (String[])Files.readAllLines(Paths.get("path to file")).toArray();