在java中不使用循环读取完整文件

在java中不使用循环读取完整文件,java,file,io,Java,File,Io,可能重复: 我正在尝试使用FileReader读取文件的内容。但是我不想逐行读取文件。是否可以不循环地读取整个文件。 我正在使用以下代码 try { File ff=new File("abc.txt"); FileReader fr=new FileReader(ff); String s; while(br.read()!=-1) { s=br.readLine(); } } catch(Exce

可能重复:

我正在尝试使用FileReader读取文件的内容。但是我不想逐行读取文件。是否可以不循环地读取整个文件。 我正在使用以下代码

 try
 {
     File ff=new File("abc.txt");
     FileReader fr=new FileReader(ff);

     String s;
     while(br.read()!=-1)
     {
          s=br.readLine();
     }
 }

 catch(Exception ex)
 {
     ex.printStackTrace();
 }
如果使用JDK5或更高版本,可以尝试使用

Scanner scan = new Scanner(file);  
scan.useDelimiter("\\Z");  
String content = scan.next(); 
或者你也可以使用


Java7单线解决方案

List<String> lines = Files.readAllLines(Paths.get("file"), StandardCharsets.UTF_8);

如果您使用的是Java5/6,那么可以使用for read file to string。该类包含几个读取文件的方法

e、 g.使用方法
FileUtils\readFileToString

File file = new File("abc.txt");
String content = FileUtils.readFileToString(file);

如果文件很小,则可以读取整个数据一次:

File file = new File("a.txt");
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
fis.read(data);
fis.close();

String str = new String(data, "UTF-8");

由于Java 11,您可以做得更简单:

import java.nio.file.Files;

Files.readString(Path path);
Files.readString​(Path path, Charset cs)

来源:

在Android中找不到该文件。并非所有Java答案都必须适合Android,@akauppi!只需从另一个答案中寻找Android支持的解决方案<代码>字符串文本=Files.readString(path.get(“文件”))甚至更短。如果您已经拥有File对象,则可以执行
File.toPath()
内部
readAllBytes
对Android很重要:
调用需要API级别26:java.nio.file.Files#readAllBytes
-对于
readString
也是一样。不适用于InputStream的s.a。Android资产(无长度)有多小?文件的全部内容将存储在内存中。因此,避免阅读类似以下内容的5GB文件:-)注意:
file.length()
可能会为
/proc
下的文件返回0。在这种情况下,此代码段将返回一个空字符串。而且
read
可能无法填充整个缓冲区。在大多数JRE的实践中它可能会工作,但API中没有保证。请注意,扫描仪在使用后应该关闭。
String data=Files.toString(新文件(“path.txt”)、Charsets.UTF_8)。只是一个小错误。:-)带
扫描仪的此代码只能从文件中读取前1024个字节。看看源代码。它读取缓冲区并用这个regexp检查它。这始终有效-然后返回所有缓冲区内容。默认情况下,缓冲区大小为1024字节。这是一种糟糕的方法。正确的解决方案(对于Java 1.7及更高版本)是
Files.readAllLines()
。对于旧式JRE,
FileInputStream.read()
可能是最好的。我不确定它是否可以移植到所有平台(即Ctl-Z在任何地方都可以识别),而且很容易错过执行
Scanner.close()
。这可能是使用第三方库的最简单解决方案。编写的代码最少;要添加到project中的库还有很多。不推荐使用FileUtils类型中的readFileToString(File)方法此代码一开始不会编译。有一个单行Java 11解决方案:
File file = new File("a.txt");
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
fis.read(data);
fis.close();

String str = new String(data, "UTF-8");
import java.nio.file.Files;

Files.readString(Path path);
Files.readString​(Path path, Charset cs)