Java:如何在Java中将文件对象转换为字符串对象?

12

可能有重复:
如何从文件内容创建Java字符串

我有一个HTML文件,想要从中提取信息。为此,我使用Jsoup。

现在,为了使用Jsoup,我需要将HTML文件转换为字符串。我该怎么做?

File myhtml = new File("D:\\path\\report.html")';

现在,我想要一个包含 HTML 文件内部内容的 String 对象。


3
请查看此链接:https://dev59.com/qnRC5IYBdhLWcg3wVvnL。 - Mikita Belahlazau
逐个字符读取文件,并将每个字符放入StringBuffer中。完成后,向StringBuffer请求字符串。 - Thorbjørn Ravn Andersen
2
查看 jsoup API。它有一个 parse 方法,可以接受文件作为参数。你不需要手动读取文件内容。 - Mikita Belahlazau
7个回答

31

我使用Apache Common IO将文本文件读入单个字符串。

String str = FileUtils.readFileToString(file);

简单并且“干净”。你甚至可以轻松设置文本文件的编码。

String str = FileUtils.readFileToString(file, "UTF-8");

如何做相反的操作... readStringToFile - Nida Sahar
附加的链接已过期,您能否请发布最新的URL? - Wanna Coffee
FileUtils.readFileToString在Java 8中已被弃用。不再建议使用这种方式。 - Michael Rountree

13

使用像GuavaCommons/IO这样的库。它们有一行代码方法。

Guava:

Files.toString(file, charset);

Commons / IO:

FileUtils.readFileToString(file, charset);

如果没有这样的库,我会编写一个帮助方法,类似于这样:

public String readFile(File file, Charset charset) throws IOException {
    return new String(Files.readAllBytes(file.toPath()), charset);
}

1
Files.toString已经被标记为@Deprecated,因此在Guava中现代的调用方式是Files.asCharSource(file, charset).read() - Dmytro Chasovskyi
1
@DmytroChasovskyi 是的。很难跟上Guava的废弃周期,谢谢。 - Sean Patrick Floyd

8

在Java 7中,它就像这样简单:

final String EoL = System.getProperty("line.separator");
List<String> lines = Files.readAllLines(Paths.get(fileName),
        Charset.defaultCharset());

StringBuilder sb = new StringBuilder();
for (String line : lines) {
    sb.append(line).append(EoL);
}
final String content = sb.toString();

然而,它确实有一些小缺陷(例如处理无法放入内存的文件)。

我建议查看官方Java教程中的相应部分(如果您已经具备Java基础知识也是如此)。

正如其他人指出的那样,您可能会发现一些第三方库很有用(例如Apache commons I/O或Guava)。


4
使用文件输入流读取文件并将文件内容追加到字符串中。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class CopyOffileInputStream {

    public static void main(String[] args) {

        //File file = new File("./store/robots.txt");
        File file = new File("swingloggingsscce.log");

        FileInputStream fis = null;
        String str = "";

        try {
            fis = new FileInputStream(file);
            int content;
            while ((content = fis.read()) != -1) {
                // convert to char and display it
                str += (char) content;
            }

            System.out.println("After reading file");
            System.out.println(str);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null)
                    fis.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

0
你可以将myhtml的所有内容复制到String中,如下所示:
Scanner myScanner = null;
try
{
    myScanner = new Scanner(myhtml);
    String contents = myScanner.useDelimiter("\\Z").next(); 
}
finally
{
    if(myScanner != null)
    {
        myScanner.close(); 
    }
}

当然,您可以添加一个catch块来适当处理异常。

0

-1

为什么不逐行读取文件并将其添加到StringBuffer中呢?

当你到达文件结尾时,可以从StringBuffer中获取字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接