2016-11-05 14 views
0

タイトルでわかるように、自分のsrcにインポートされたさまざまなファイルを一時ディレクトリにコピーしようとしています。この場合、「Dank」と呼ばれるCドライブにフォルダが作成されています。私がしたいのは、これらの内部ファイル(http://prntscr.com/d39rmt)を一時フォルダにコピーすることだけです。 悪い人は気にしないでください。これは、この部分に関係のないプログラムの残りの部分です。ありがとうございました。 public class sstool extends FileNotFoundException { @SuppressWarnings({ "static-access", "unused" }) public static void main(String[] args) throws IOException { Path newDirectoryPath = Paths.get("C:\\Dank"); if (!Files.exists(newDirectoryPath)) { try { Files.createDirectory(newDirectoryPath); } catch (IOException e) { System.err.println(e); } }内部パックファイルをJavaの作業ディレクトリにコピーする方法は?

+0

iirc、ClassLoader# getResource'、例えば'MyClass.class.getClassLoader()。getResource(" cheatsmasher.exe ")'、私はそのオフハンドの反復的な解決策を覚えていません – Rogue

+0

提案していただきありがとうございますが、Files.copy(pathfile 、topathfile);/ – Jebbillbobk

+0

'#getResource'が' URL'を返すので、あなたは 'Files#copy'を使用しません。 'URL#getInputStream'を使って自分で保存します。 – Rogue

答えて

0

@Rogueが近いです。アプリケーションに埋め込まれたファイルは通常、Class.getResourceまたはClass.getResourceAsStreamで読み込まれます。

あなたは絶対にFiles.copy、2つのパスの引数を取るだけではない方法を使用する必要があります。

String[] files = { 
    "cheatsmasher.exe", 
    "Everything.ini", 
    "jdgui.jar", 
    "launcher.jar - Shortcut.lnk", 
    "LAV.cfg", 
    "LAV.exe", 
    "logs - Shortcut.lnk", 
    "pexplorer32.exe", 
    "pexplorer64.exe", 
    "Prefech.lnk", 
    "schem.exe", 
    "SE32.exe", 
    "SE64.exe", 
    "skypefiles.lnk", 
    "smash.dll", 
    "synpase.lnk", 
    "TM.lnk", 
    "TS3Client.lnk", 
    "USB32.cfg", 
    "USB32.exe", 
    "USB64.cfg", 
    "USB64.exe", 
    "Vape.dll", 
    "vapev.jar", 
    "versions - Shortcut.lnk", 
}; 

Path destination = Paths.get("C:\\Dank"); 
Files.createDirectories(destination); 

for (String file : files) { 
    try (InputStream stream = 
     SSTool.class.getResourceAsStream("/tools/" + file)) { 

     Files.copy(stream, destination.resolve(file)); 
    } 
} 

スタックオーバーフロー上の一般的な質問は、あなただけのディレクトリの内容を一覧表示することができるかどうかです。答えは:いいえ、できません。 .jarファイルは、異なる拡張子を持つzipファイルであり、zipファイル内のディレクトリは実際にはディレクトリではありません。それはちょうど別のジップエントリです。 (理論上は、特定の接頭辞を持つエントリを探すすべてのエントリを反復することができますが、Javaのzipファイルシステムを使用することもできますが、これらの回避策には問題があります)。

+0

スレッドで '例外java.util.Objects.requireNonNull(不明なソース)での "メイン" java.lang.NullPointerExceptionが \t java.nio.file.Files.copyで \t(不明なソース) \t。 ' – Jebbillbobk

+0

' 'sstool.class.getResourceAsStream("/tools/"+ file))が動作していないと思われます;/ – Jebbillbobk

+0

私は抽出メソッドを試していました。自分のランニングjarファイルを "Dank"フォルダにコピーし、それらのアプリケーションを実行します。しかし、抽出時間は10分の領域でした。 – Jebbillbobk

関連する問題