gpt4 book ai didi

Java - 从文本文件中简单读取的通常做法是什么?

转载 作者:行者123 更新时间:2023-11-30 06:34:09 25 4
gpt4 key购买 nike

在长期中断之后,我正在研究 Java,并且遇到了常见的复杂问题。

我遇到的应该是一个简单的问题,但是对于 InputStreams、InputReaders 以及处理 finally 和 close() 的问题,我没有看到明显的答案。

我在一个简单命令行应用程序的 main() 函数中。我已经解析了我的命令行,并且我有一个输入文件名。这包含文本文件的路径或“-”,这意味着程序应该从 System.in 中读取。

我想要的是一个包含文件内容(或 System.in 的剩余内容)的字符串。我最终得到的结果太复杂了,所以我正在寻找简单的方法来完成它。

问题 1:给定一个 InputStream(可能是 System.in,也可能是我自己打开的 FileInputStream()),将其所有内容读入 String 的最简单方法是什么?我使用的各种 readAll() 方法我已经看到返回的字节数组,它有一个位置,但这不是我要找的。

问题 2:确保我打开的任何阅读器将始终关闭的常用习惯用法是什么?

如果我用 C++ 编写,我会把 close() 放在类的析构函数中,并且我会确保当我的对象超出范围时会调用 close()。

如果我用 C# 编写,我会使用“using” block ,并且我会有相同的保证。

我确信这可以用 Java 完成,但到目前为止我的尝试似乎很麻烦。

如果我尝试:

try
{
InputStream inStream = new InputStream(...);
}
finally
{
inStream.close();
}

我收到“inStream 无法解析”的投诉。

但如果我尝试

InputStream inStream = null;
try
{
inStream = new InputStream(...);
}
finally
{
if (inStream != null)
inStream.close();
}

我收到“未处理的异常类型 IOException。”

所以现在我在:

InputStream inStream = null;
try
{
inStream = new InputStream(...);
}
finally
{
try
{
if (inStream != null)
inStream.close();
}
catch (IOException ex)
{
}
}

这看起来很可笑。

通常的模式是什么?

最佳答案

您可能想尝试使用 Apache Commons IO为你包装一些这些东西。一个例子:

import org.apache.commons.io.FileUtils;

File f = new File("mystuff.txt");
String contents = FileUtils.readFileToString(f);

或者,如果您从流开始:

import org.apache.commons.io.IOUtils;

InputStream is = new InputStream(...);
String contents = IOUtils.toString(is);

还有很多很多 :-)。

关于Java - 从文本文件中简单读取的通常做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7342118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com