Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中读取文本文件_Java_Text_Io - Fatal编程技术网

在Java中读取文本文件

在Java中读取文本文件,java,text,io,Java,Text,Io,我有这样一个文本文件: Item 1 Item 2 Item 3 我需要能够将每个“itemx”读入一个字符串,并理想地将所有字符串存储为vector/ArrayList 我试过: InputStream is = new FileInputStream("file.txt"); is.read(); //looped for every line of text 但这似乎只处理整数 谢谢您应该使用FileUtils来完成此操作。它有一个名为 公共静态列表读取行(文件、字符集编码)引发IOE

我有这样一个文本文件:

Item 1
Item 2
Item 3
我需要能够将每个“itemx”读入一个字符串,并理想地将所有字符串存储为vector/ArrayList

我试过:

InputStream is = new FileInputStream("file.txt");
is.read(); //looped for every line of text
但这似乎只处理整数


谢谢

您应该使用FileUtils来完成此操作。它有一个名为

公共静态列表读取行(文件、字符集编码)引发IOException
将文件的内容逐行读取到字符串列表中。文件始终处于关闭状态


请参阅上面@backslax的注释,以了解如何使用
InputStream.read()
错误



@反斜杠还提到,只有在使用Java 1.7或更高版本时,才可以使用反斜杠。

这里有几个答案,对我们来说,最简单的是扫描仪(在Java.util中)

Scanner scan = new Scanner(new FileInputStream("file.txt"));
scan.nextLine();
它有几个方便的方法,如nextLine()和next()以及nextInt(),因此您可以简单地执行以下操作:

Scanner scanner = new Scanner(new File("file.txt"));
List<String> text = new ArrayList<String>();
while (scanner.hasNextLine()) {
  text.add(scanner.nextLine());
}
Scanner Scanner=新的扫描仪(新文件(“File.txt”);
列表文本=新的ArrayList();
while(scanner.hasNextLine()){
text.add(scanner.nextLine());
}
或者,您可以使用BufferedReader(在java.io中):

BufferedReader=new BufferedReader(new FileReader(“file.txt”);
列表文本=新的ArrayList();
for(字符串行;(line=reader.readLine())!=null;){
文本。添加(行);
}

但是,扫描仪通常更易于使用。

您可以使用Java 7的
文件#readAllLines
。短的一行程序,无需第三方库导入:)

BufferedReader br = new BufferedReader(new FileReader("file.txt"));
    try {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();
        String [] tmp ;
        while (line != null) {
            sb.append(line);
            tmp = line.Split(" ");
            line = br.readLine();
        }
        String everything = sb.toString();
    } finally {
        br.close();
    }
列表行=
Files.readAllLines(path.get(“file.txt”)、StandardCharsets.UTF_8);

但这似乎只处理整数。这是它的正常行为。From JavaDocs:read():从输入流中读取数据的下一个字节。他说的是对的,您必须将字节解码回字符。看看这个-1因为没有对Java的IO API进行任何研究…+1因为提出了一个理由,为什么你-1:-虽然我同意这种方法,但我认为它并不能回答他的问题。我认为他的问题更多的是编码和读取字节Stream@Jackie我想这确实回答了他的问题。他的问题是关于如何将文本文件读入列表。他的方法有问题,因为他不正确地使用了
read()
,但是如果他一开始就知道这个库,他不会在意
read()
为什么不能按他想要的方式工作。没有必要使用
FileUtils
,而且
Files
类有一个
readAllLines
方法,因此,无需导入apachecommons包即可this@BackSlash这是一个很好的观点。唯一需要注意的是,您必须使用Java 7才能使用
文件
@tieTYT我知道,我的答案只是对您的答案的一个“加号”,事实上,在每一个Java版本上都可以使用,而不仅仅是在最后一个版本上
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
List<String> text = new ArrayList<String>();
for (String line; (line = reader.readLine()) != null; ) {
  text.add(line);
}
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
    try {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();
        String [] tmp ;
        while (line != null) {
            sb.append(line);
            tmp = line.Split(" ");
            line = br.readLine();
        }
        String everything = sb.toString();
    } finally {
        br.close();
    }
List<String> lines = 
       Files.readAllLines(Paths.get("file.txt"), StandardCharsets.UTF_8);