gpt4 book ai didi

java - 静态加载 .txt 文件

转载 作者:行者123 更新时间:2023-12-01 10:56:45 25 4
gpt4 key购买 nike

我知道这个问题以前经常被问到,但其他答案都不适合我。我正在尝试静态加载 .txt 文件。它在编译器(Eclipse)内工作,但在导出后出现 FileNotFound 异常。

我需要一个方法,该方法将接受文件路径并静态加载该 .txt 文件,并将该文件作为字符串返回。我想我必须用 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();
}

关于我应该做什么有什么想法吗?

最佳答案

我认为你的问题必须与导出时运行程序的方式有关,因为我已经获取了你的代码,创建了一个 jar,运行它并且它在没有更改任何一行的情况下工作。好吧,我添加了一个 main 函数来运行它。我添加代码以防万一,但您会看到代码是相同的。

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

正如我一开始所说的,你的代码很好。只需仔细检查如何导出代码并运行它

关于java - 静态加载 .txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33588495/

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