0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

jpackageで削除できないフォルダを作ってしまったら...

Posted at

はじめに

「やってしまった...。jpackageでiフラグを./まで書いたところでエンターキーを押してしまった...。」
ってことありますよね?

You have set --i and --temp such that input folder is current directory and therefore contains the temp folder - so jpackage is copying the current directory into temp every time.

上のstackoverflowの記事にも書かれているように、iフラグで指定した入力フォルダの中に出力先フォルダが含まれていると、大変なことになってしまいます。
つまり、出力したフォルダ構造そのものが入力されてしまうので、無限ループになります。これによって、C:\project\fuga\app\fuga\app\fuga\app\fuga\app...というような無限(実際は、文字数等の関係で、どこかで止まります)に続く、フォルダ構造が生成されてしまうのです。

こうなってしまうと、Windowsのエクスプローラーでは消すことが出来なくなります。実は、Windowsが扱うことが出来るパスの長さは決まっているものの、jpackageはそんなことお構いなしにフォルダ構造を生成し、扱える文字数を余裕で突破してしまうので、ゴミ箱に移動することが出来なくなるのです。

同様に、コマンドプロンプトのrdコマンドの/sも、実行途中でエラーを吐いて落ちてしまいます。一般的なエンジニアはUbuntu等が入ったboot USBを常備しているでしょうが、たまたま無かった場合はどうやって消せばよいのでしょうか?

解決法

「Javaによって生成されたのなら、Javaによって消せばいいじゃないか。」という発想です。以下のコードを適当なJavaファイルに書き込み、パスの部分を適当に書き換えます。実行すると、見事、フォルダが削除されました。

zettai_ni_kesu.java
import java.nio.file.*;
import java.io.*;
import java.util.*;

class zettai_ni_kesu{
    public static void main(String[] args) {
        try {
            var dir=Paths.get("C:\\Users\\osane\\hogehoge\\keshitai");
            var walk=Files.walk(dir);
            walk.sorted(Comparator.reverseOrder())
                .map(Path::toFile)
                .forEach(File::delete);
        } catch (IOException ioErr) {}
    }
}

 
こちらのページを参考に作成しました。

おわりに

コマンドの引数はよくよく確認してから実行しましょう。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?