2017-01-16 10 views
1
を使用して

私が使用しています:パスが機能しません。 File.separator

  • JDKこのパスが機能しない理由私は興味があった

1.8.0.71

  • IntelliJの2016年3月2日
  • Win7の:

    public static final String ZPL_TEMPLATE = 
            File.separator 
            + "templates" 
            + File.separator 
            + "Template.txt"; 
    

    これはまだ正常です:

    ここ
    public static final String TEMPLATE = "/templates/Template.txt"; 
    

    (これは別のパッケージ内にある)が使用される場合である。

    InputStream is = this.getClass().getResourceAsStream(TEMPLATE); 
    

    EDIT:例外:勝利7上のファイルセパレータBecaseuse

    ... 
    java.lang.NullPointerException: null 
        at java.io.Reader.<init>(Reader.java:78) 
        at java.io.InputStreamReader.<init>(InputStreamReader.java:72) 
        ... 
    
  • +0

    非常に愚かな質問のお詫びですが、 "/templates/ZPLTemplate.txt"は存在しますか?あなたが仕事として与えた例は、ZPLなしで "/templates/Template.txt"です。チェックしてるだけ。 – phss

    +0

    また、取得したエラーの詳細をお知らせください。 – phss

    +0

    'FileSystems.getDefault()。getSeparator(); 'を使ってみてください – Jobin

    答えて

    2

    getResouceAsStreamの場合と同様に、内部リソースにアクセスする場合、ファイル区切り文字は/である必要があります。

    私はあなたがWindowsマシンにいると思うので、ファイル区切り文字は\です。

    詳細については、How to use file separator when loading resourcesを参照してください。

    +0

    あなたが提供したリンクが機能しません(少なくとも私にとってはそうではありません) –

    +0

    修正されました。それは最後に余分なスペースだった...ありがとう、@ 4673_j – Zack

    +0

    右。私はシステムセパレーターの何らかの種類を望んでいた。私はシンプルさは、提供されたリンクでかなり明確であると思います。前方にスラッシュを入れてください。 –

    2

    は、 '\' であり、そしてそれは文書でgetResourceAsStreamの状態であるので

    委任の前に、このアルゴリズムを使用して、指定されたリソース名から絶対リソース名が構築されます。

    名前が '/'( '\ u002f')で始まる場合、 '/'に続く名前の それ以外の場合、絶対名の形式は次のとおりです。 modified_pa​​ckage_name/name modified_pa​​ckage_nameは、このオブジェクトのパッケージ名で、 '/'が '。'に置き換えられています。 ( '\ u002e')。

    1

    getResourceAsStreamファイルパスではなく、パラメータとしてリソース名が必要です。

    リソース名、Javaでが前方で分離されているにかかわらず、ファイルシステム、/をスラッシュ(リソース名/パスはクラスパス上ではなく、ファイルシステム上のパスを表します)。

    したがって、ファイルシステムセパレータを使用してリソース名を構築することはできません。ウィンドウでは、それはバックスラッシュになります\

    関連する問題