在Java中,如何将整个输入文件转换为一个String
?
换句话说,如果我有一个输入文件"test.in"
:
c++
java
python
test
然后我想创建一个包含String
的{{1}}。
我想到了
的内容"c++javapythontest"
但这似乎不起作用 有没有一种有效的方法呢?
答案 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")));