JAVA如何在Project中引用文件
JAVA how to refer the file in Project
我正在我的 VS Code 中创建一个简单的 Java 项目,这是项目结构。
我想在我的代码中引用 wordcount.txt
,但是找不到文件。
这是我的测试代码:
public class BatchJob {
public static void main(String[] args) throws Exception {
// set up the batch execution environment
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
//URL url = BatchJob.class.getClassLoader().getResource("resources/wordcount.txt");
DataSource<String> dataset = env.readTextFile("wordcount.txt");
DataSet<Tuple2<String, Integer>> result = dataset.flatMap(new Tokenizer())
.filter(new FilterFunction<Tuple2<String, Integer>>(){
@Override
public boolean filter(Tuple2<String, Integer> arg0){
return arg0.f1 >0;
}
})
.groupBy(0)
.sum(1);
result.print();
}
public static class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>>{
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
String[] tokens = value.toLowerCase().split(",");
for (String token : tokens) {
if ( !token.isEmpty() && token.length() > 0) {
out.collect(new Tuple2<String, Integer>(token, 1));
}
}
}
}
}
应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。关于如何形成 URL.
的 embedded-resource must be accessed by URL rather than file. See the info. page for embedded resource
Thanks for your work, work with getResource
. Here is the working
code
URL url = BatchJob.class.getClassLoader().getResource("wordcount.txt");
DataSource<String> dataset = env.readTextFile(
URLDecoder.decode(url.getFile(),"UTF-8") );
不幸的是,此修复程序在 url.getFile()
出错。
回到原始建议的 粗体 部分.. ".. 必须 URL 而不是文件:这不是建议,也不是良好的编程习惯,而是要求。问题是,一旦应用程序。构建后,资源将位于 Jar 中,并且 不再是 File
。它不会像 File
那样 可访问 。因此,虽然它可能在 运行 来自 IDE 时起作用(当 URL 指向 是一个 文件时),但它将失败构建的 Jar。
我正在我的 VS Code 中创建一个简单的 Java 项目,这是项目结构。
我想在我的代码中引用 wordcount.txt
,但是找不到文件。
这是我的测试代码:
public class BatchJob {
public static void main(String[] args) throws Exception {
// set up the batch execution environment
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
//URL url = BatchJob.class.getClassLoader().getResource("resources/wordcount.txt");
DataSource<String> dataset = env.readTextFile("wordcount.txt");
DataSet<Tuple2<String, Integer>> result = dataset.flatMap(new Tokenizer())
.filter(new FilterFunction<Tuple2<String, Integer>>(){
@Override
public boolean filter(Tuple2<String, Integer> arg0){
return arg0.f1 >0;
}
})
.groupBy(0)
.sum(1);
result.print();
}
public static class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>>{
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
String[] tokens = value.toLowerCase().split(",");
for (String token : tokens) {
if ( !token.isEmpty() && token.length() > 0) {
out.collect(new Tuple2<String, Integer>(token, 1));
}
}
}
}
}
应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。关于如何形成 URL.
的 embedded-resource must be accessed by URL rather than file. See the info. page for embedded resourceThanks for your work, work with
getResource
. Here is the working codeURL url = BatchJob.class.getClassLoader().getResource("wordcount.txt"); DataSource<String> dataset = env.readTextFile( URLDecoder.decode(url.getFile(),"UTF-8") );
不幸的是,此修复程序在 url.getFile()
出错。
回到原始建议的 粗体 部分.. ".. 必须 URL 而不是文件:这不是建议,也不是良好的编程习惯,而是要求。问题是,一旦应用程序。构建后,资源将位于 Jar 中,并且 不再是 File
。它不会像 File
那样 可访问 。因此,虽然它可能在 运行 来自 IDE 时起作用(当 URL 指向 是一个 文件时),但它将失败构建的 Jar。