72

Java アプリケーションにファイルをロードするにはどうすればよいですか?

4

7 に答える 7

56

短い答え

次の 2 つの方法のいずれかを使用します。

例えば:

InputStream inputStream = YourClass.class.getResourceAsStream("image.jpg");

--

長い答え

通常、絶対パスを使用してファイルをロードすることは望ましくありません。たとえば、できる場合はこれを行わないでください。

File file = new File("C:\\Users\\Joe\\image.jpg");

この手法は、少なくとも 2 つの理由からお勧めできません。まず、特定のオペレーティング システムへの依存関係が作成され、アプリケーションが別のオペレーティング システムに簡単に移行できなくなります。Java の主な利点の 1 つは、多くの異なるプラットフォームで同じバイトコードを実行できることです。このような絶対パスを使用すると、コードの移植性が大幅に低下します。

第 2 に、ファイルの相対的な場所によっては、この手法によって外部依存関係が作成され、アプリケーションの移動性が制限される可能性があります。ファイルがアプリケーションの現在のディレクトリの外に存在する場合、これにより外部依存関係が作成され、アプリケーションを別のマシンに移動するには、依存関係を認識する必要があります (エラーが発生しやすくなります)。

代わりに、クラスのgetResource()メソッドを使用してください。Classこれにより、アプリケーションの移植性が大幅に向上します。異なるプラットフォーム、マシン、またはディレクトリに移動しても、正しく機能します。

于 2008-08-09T05:35:50.623 に答える
10

getResourceは問題ありませんが、作業ディレクトリの場所を制御できる限り(通常は可能です)、相対パスを使用しても同様に機能します。

さらに、区切り文字に関するプラットフォームの依存関係は、File.separatorFile.separatorChar、またはSystem.getProperty( "file.separator")を使用して取得できます。

于 2008-08-09T07:18:04.550 に答える
8

構成またはデータ (入力ファイルなど) またはリソースとして、何のためにファイルをロードしていますか?

  • リソースとしての場合は、Will と Justinによる提案と例に従ってください
  • 構成の場合は、ResourceBundleまたはSpringを使用できます (構成がより複雑な場合)。
  • 内部のデータを処理するためにファイルを読み取る必要がある場合は、このコード スニペットが役立ち、[ファイル を閉じるのを忘れないでください] をBufferedReader file = new BufferedReader(new FileReader(filename))使用してファイルの各行を読み取ることができます。file.readLine();
于 2008-08-27T18:47:33.393 に答える
3

Windowsでも、Unixスタイルのパスセパレータを使用するだけで問題は発生しませんでした(ただし、File.separatorCharを確認することをお勧めします)。

ClassLoader.getResource()を使用する手法は、JARファイルからロードされる読み取り専用リソースに最適です。場合によっては、プログラムでアプリケーションディレクトリを決定できます。これは、管理者が構成可能なファイルやサーバーアプリケーションに役立ちます。(もちろん、ユーザーが編集可能なファイルは、System.getProperty( "user.home")ディレクトリのどこかに保存する必要があります。)

于 2008-08-09T09:16:10.023 に答える
2
public byte[] loadBinaryFile (String name) {
    try {

        DataInputStream dis = new DataInputStream(new FileInputStream(name));
        byte[] theBytes = new byte[dis.available()];
        dis.read(theBytes, 0, dis.available());
        dis.close();
        return theBytes;
    } catch (IOException ex) {
    }
    return null;
} // ()
于 2011-02-20T17:21:44.813 に答える
0
public static String loadTextFile(File f) {
    try {
        BufferedReader r = new BufferedReader(new FileReader(f));
        StringWriter w = new StringWriter();

        try {
            String line = reader.readLine();
            while (null != line) {
                w.append(line).append("\n");
                line = r.readLine();
            }

            return w.toString();
        } finally {
            r.close();
            w.close();
        }
    } catch (Exception ex) {
        ex.printStackTrace();

        return "";
    }
}
于 2019-12-23T12:20:17.890 に答える