我知道这个问题以前经常被问过,但其他答案都没有对我有用。我试图静态加载.txt文件。它在编译器(Eclipse)中工作,但在导出后我得到一个FileNotFound异常。
我需要一个方法,它将接受文件路径并静态加载该.txt文件,并将该文件作为String返回。我想我必须对loadRecourceAsStream()
做点什么,但我不确定。
以下是我现在加载它的方式:
public static String getFilePath(String path) {
String line = null;
String file = "";
try {
FileReader fileReader = new FileReader(path);
BufferedReader bufferedReader = new BufferedReader(fileReader);
while((line = bufferedReader.readLine()) != null){
file = file + line;
}
bufferedReader.close();
} catch(FileNotFoundException e) {
System.out.println("Unable to open file " + path + "\n");
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
return file;
}
以下是我尝试过的其他一些事情。它们都在编译器中工作,但在导出后不起作用:
public static String loadFileAsString(String path){
StringBuilder builder = new StringBuilder();
try{
BufferedReader br = new BufferedReader(new FileReader(path));
String line;
while((line = br.readLine()) != null)
builder.append(line + "\n");
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(path);
br.close();
}catch(IOException e){
e.printStackTrace();
}
return builder.toString();
}
和
public static String getFile(String path) {
Scanner controlBoard = new Scanner(System.in);
controlBoard = new Scanner(Utils.class.getResourceAsStream(path));
String file = controlBoard.nextLine();
file += "\n" + controlBoard.nextLine();
file += "\n" + controlBoard.nextLine();
return file;
}
和
public static String getFile(String path) {
System.out.println("test");
StringBuilder out = new StringBuilder();
try {
InputStream in = new FileInputStream(new File(path));
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while((line = reader.readLine()) != null) {
out.append(line + "\n");
}
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
return out.toString();
}
关于我应该做什么的任何想法?
答案 0 :(得分:1)
我认为你的问题必须与导出程序时的运行方式有关,因为我已经采用了你的代码,创建了一个jar,运行它并且它在不改变单行的情况下工作。好吧,我添加了一个主要功能来运行它。我添加代码以防万一,但你会发现代码是相同的。
package com.iseji.app.main;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main (String args[]){
System.out.println(getFilePath(args[0]));
}
public static String getFilePath(String path) {
String line = null;
String file = "";
try {
FileReader fileReader = new FileReader(path);
BufferedReader bufferedReader = new BufferedReader(fileReader);
while((line = bufferedReader.readLine()) != null){
file = file + line;
}
bufferedReader.close();
} catch(FileNotFoundException e) {
System.out.println("Unable to open file " + path + "\n");
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
return file;
}
}
所以问题是你是如何将文件导入jar的。您可以真正使用IDE的“导出到”功能(Eclipse,IntelliJ或其他)。另一方面,我建议您使用maven或gradle等生命周期软件框架。就像一个例子,我展示了用于创建jar的gradle文件(但正如我所说,这并不重要)
apply plugin: 'java'
sourceCompatibility = 1.5
version = '1.0'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
jar {
manifest {
attributes 'Main-Class': 'com.iseji.app.main.Main'
}
}
无论如何如何将代码导出到jar,关键是Manifest文件的样子。你必须确定它表明哪个是主类。确认它类似于:
Manifest-Version: 1.0
Main-Class: com.iseji.app.main.Main
通过这种方式,您可以像通常作为参数一样传递它来读取
java -jar ReadingFile-1.0.jar ../../src/main/resources/sample.txt
正如我在开头所说,你的代码很好。只需仔细检查如何导出代码并运行它