如何建立一个罐子文件,包括外部文件

0

的问题

我想包括文本文件中的资源文件夹到罐子文件。 这里是最小的例子:

import java.io.File;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.readFile( "test.txt" );
    }

    public void readFile(String fileName){
        File file = new File( getClass().getResource( fileName ).getPath() );

        try{
            Scanner scanner = new Scanner( file );
            while ( scanner.hasNextLine() ){
                System.out.println( scanner.nextLine() );
            }
        }catch (Exception e){
            System.out.println( e );
        }
    }
}

这里是什么test.txt 文件:

hello
world

这是我的项目看起来像:

enter image description here

我可以运行的代码成功。 我产生的罐子如下:

enter image description here

我已经增加资源的文件夹,通过点击"+"符号。 然而,当我呼吁所产生的罐子文件,它仍然抱怨FileNotFoundException.

任何建议?

intellij-idea jar java
2021-11-18 02:01:21
1

最好的答案

1

new File 代表一个文件。 如在 文件. 一个条目中的一个罐子文件不是一个文件。

你的代码 无法工作 为什么你想要做的。

文件是错误的抽象概念。 你想要的 InputStream 或者可能的网址,都可以代表文件,网络流,on-the-fly生成的东西,而且,是的,项目在罐子的文件。

public void readFile(String fileName) {
  try (var in = ThisClass.class.getResourceAsStream(fileName)) {
    Scanner scanner = new Scanner(in, StandardCharsets.UTF_8);
    // proceed here.
  } catch (IOException e) {
    throw new RuntimeException("Uncaught", e);
  }
}

一些东西会在这段:

  • 使用 ThisClass.class,不 getClass(). 该getClass路线的中断,当你的子类。 你不可能这样做在这里,但你以后可能的;它是更好地编写代码,总工作时,它只是作为短。
  • 这是一种资源,必须关闭。 这个代码,因此使用的尝试与资源。
  • 我们得到一个输入流(getResourceAsStream 返回一项输入流),这是正确的层次的抽象可能代表了一项内部的一个罐子(vs File 这就是不可能做那)。
  • 我们告诉扫描仪什么的charset编码。 否则你会得到平台的默认,这是错误的,讨厌的:在自己的计算机上,它将始终是工作,然后你上运行它的另一个系统,它将失败。 总是,总是指定charset编码随时随地字节都变成个字符的(或者反之亦然)。
  • e.printStackTrace() 是邪恶的。 永远不要异常的处理方式。 如果你有没有想(这是公平的;如果这将引发IOEx,清楚什么是严重的错误,这是一个好主意你的应用只是崩溃,与尽可能多的细节是可能的)-上面是正确的方式来处理它。
2021-11-18 02:07:53

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................