如何将整个输入文件转换为字符串?

时间:2016-11-17 01:37:35

标签: java

在Java中,如何将整个输入文件转换为一个String

换句话说,如果我有一个输入文件"test.in"

c++
java
python
test

然后我想创建一个包含String的{​​{1}}。

我想到了

的内容
"c++javapythontest"

但这似乎不起作用 有没有一种有效的方法呢?

6 个答案:

答案 0 :(得分:4)

要读取文件内容,请丢弃换行符:

String contents = Files.lines(Paths.get("test.in")).collect(Collectors.joining());

我认为您需要测试hasNextLine(),并且当您连接这样的字符串时,您的代码性能会受到创建这么多对象的影响。如果您将代码更改为使用StringBuilder,则运行速度会快得多。

答案 1 :(得分:1)

可能有很多方法可以做到这一点。您可以尝试的方法之一是使用nio包类。您可以使用readAllBytes类的java.nio.file.Files方法先获取byte array,然后从字节数组new String(bytes)创建一个新的String对象。

阅读此方法的Java Doc

以下是示例程序:

byte[] bytes= Files.readAllBytes(Paths.get(filePath));
String fileContent = new String(bytes);

答案 2 :(得分:0)

将String测试声明出循环,然后迭代填充它。

答案 3 :(得分:0)

此代码是对原始逻辑的一个小修改。
StringBuilder创建一个可变的字符序列,这意味着我们只需将内容附加到StringBuilder对象的值,而不是每次都创建一个新对象。

在您的代码中,String test = test + input.nextLine();位于while循环内。
因此,每次迭代while循环都会创建String测试的新对象,因此它不会保存以前的值。

String path = "test.txt";
Scanner input = new Scanner(new File(path));
StringBuilder sb = new StringBuilder();

while (input.hasNext()) {
    sb.append(input.nextLine() + "\n");
}
System.out.println(sb.toString());

答案 4 :(得分:0)

您可以尝试这样做。
它是一个简单的一个班轮

String str = new String(Files.readAllBytes(Paths.get("/path/to/file")));

这将读取整个文件并将其保留为String 如果你想删除换行符。

str.replace("\n", "");

答案 5 :(得分:0)

String.join已添加

Java8,内部使用StringBuilder

String content = String.join("", Files.readAllLines(Paths.get("test.in")));