Java 如何将整个输入文件转换为字符串?
在Java中,如何将整个输入文件转换为一个字符串 换句话说,如果我有一个输入文件Java 如何将整个输入文件转换为字符串?,java,Java,在Java中,如何将整个输入文件转换为一个字符串 换句话说,如果我有一个输入文件“test.In”: 然后我想创建一个字符串,其中包含“c++javapythontest” 我想到了一些类似于 Scanner input = new Scanner(new File("test.in")); while(input.hasNext()){ String test = test + input.nextLine(); } 但这似乎不起作用。 是否有一种有效的方法来执行此操作?要读取文件内
“test.In”
:
然后我想创建一个字符串
,其中包含“c++javapythontest”
我想到了一些类似于
Scanner input = new Scanner(new File("test.in"));
while(input.hasNext()){
String test = test + input.nextLine();
}
但这似乎不起作用。是否有一种有效的方法来执行此操作?要读取文件内容,丢弃换行符:
String contents = Files.lines(Paths.get("test.in")).collect(Collectors.joining());
我认为您需要测试
hasNextLine()
,当您连接这样的字符串时,会创建太多的对象,从而影响代码的性能。如果您将代码更改为使用StringBuilder
,它将运行得更快。有很多方法可以做到这一点。您可以尝试的方法之一是使用nio
包类。您可以使用java.nio.file.Files
类的readAllBytes
方法首先获取字节数组
,然后从字节数组新字符串(字节)
创建新字符串对象
请阅读此方法的说明
以下是一个示例程序:
byte[] bytes= Files.readAllBytes(Paths.get(filePath));
String fileContent = new String(bytes);
在循环外声明字符串测试,然后迭代填充它。此代码是对原始逻辑的一个小修改
创建一个可变的字符序列,这意味着我们只需将内容附加到StringBuilder对象的值,而不是每次都创建一个新对象。
在您的代码中
String test=test+input.nextLine()代码>在内,而在循环内
因此,在while循环的每次迭代中都会创建新的字符串测试对象,因此它不会保存以前的值。
您可以试试这个。
这是一条简单的单行线
String str=新字符串(Files.readAllBytes(path.get(“/path/to/file”))代码>
这将读取整个文件并将其保留为字符串。
如果要删除新行字符
str.replace(“\n”和“)
String.join已添加到内部使用StringBuilder的Java8
中
String content = String.join("", Files.readAllLines(Paths.get("test.in")));
想想这个循环的第一次迭代<代码>测试
未定义,那么有什么要添加的?那么您想放弃所有换行吗?FileInputStream fis=newfileinputstream(“test.in”);byte[]byteArray=新字节[fis.Available()];fis.read(字节数组,0,字节数组长度);String str=新字符串(byteArray)代码>
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());
String content = String.join("", Files.readAllLines(Paths.get("test.in")));