2016-11-17 85 views
2

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

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

c++ 
java 
python 
test 

然后我想创建一个包含"c++javapythontest"一个String

我想的东西沿

Scanner input = new Scanner(new File("test.in")); 
while(input.hasNext()){ 
    String test = test + input.nextLine(); 
} 

行,但似乎并没有工作。
有没有一种有效的方法来做到这一点?

+2

试想一下循环的第一次迭代。 'test'是未定义的,那么要添加什么呢? –

+0

所以你想放弃所有换行符? – Bohemian

+0

'FileInputStream fis = new FileInputStream(“test.in”); byte [] byteArray = new byte [fis.availble()]; fis.read(字节阵列,0,byteArray.length); String str = new String(byteArray);' –

回答

4

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

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

我认为你需要测试hasNextLine(),和你的代码的表现从创造这么多的对象患有当您连接喜欢的字符串。如果您将代码更改为使用StringBuilder,则运行速度会更快。

1

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

阅读这个方法的Java Doc

以下是一个示例方案:

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

声明字符串测试跳出循环,然后循环填充它。

0

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

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

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()); 
0

可以代替试试这个。
它的一个简单的衬垫

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

这读取整个文件,并保持它作为字符串。
如果你想删除新的行字符。

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

0

String.joinJava8被加入内部使用StringBuilder

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