Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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 - Fatal编程技术网

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(); } 但这似乎不起作用。 是否有一种有效的方法来执行此操作?要读取文件内

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

换句话说,如果我有一个输入文件
“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")));