静态加载.txt文件

时间:2015-11-07 22:23:30

标签: java file load

我知道这个问题以前经常被问过,但其他答案都没有对我有用。我试图静态加载.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();
}

关于我应该做什么的任何想法?

1 个答案:

答案 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

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