gpt4 book ai didi

java - java中super不能作为构造函数第一行时的解决方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:08 26 4
gpt4 key购买 nike

我正在使用将本地文件作为输入的 CSVReader 类。但是现在,我需要能够读取本地文件以及具有 URL 路径的文件(如 http://example.com/example.txt )。为此,我想从 CSVReader 派生一个类来标识文件是本地文件还是 URL,然后在构造函数的第一行中使用 super() 将 InputStream 传递给父级。这样做的优雅方式是什么?

public class FileReader extends CsvReader{
public FileReader(){
if (fileName != null) {

if (fileName.trim().startsWith("http:")) {
// it is URL
URL url = new URL(fileName);
inputStream = new BufferedReader(new InputStreamReader(
url.openStream(), charset),
StaticSettings.MAX_FILE_BUFFER_SIZE);
}else{
//it is a local file
inputStream = new BufferedReader(new InputStreamReader(
new FileInputStream(fileName), charset),
StaticSettings.MAX_FILE_BUFFER_SIZE);
}

}
//Now pass the input stream to CsvReader
super(inputStream, delimiter, charset); //error - super has to be first line of constructor
}
}

最佳答案

可以编写辅助方法:

super(createReader(createInputStream(resouce), "UTF-8"), ";");

您的辅助方法可能如下所示:

public static InputStream createInputStream(String resource)
{
resource = resource.trim();

if (resource.startsWith("http:"))
{
return new URL(resource).openStream();
} else
{
return new FileInputStream(new File(resource));
}
}

public static BufferedReader createReader(InputStream is, String charset)
{
return new BufferedReader(new InputStreamReader(is, charset));
}

关于java - java中super不能作为构造函数第一行时的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9675431/

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