• R/O
  • SSH

提交

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#objective-cqtwindows誰得cocoapythonphprubygameguibathyscaphec翻訳omegat計画中(planning stage)frameworktwittertestdomvb.netdirectxbtronarduinopreviewerゲームエンジン

Gradle/Mavenが持っているjarファイルのパスを表示するツール


Commit MetaInfo

修訂439e0d87284ec55b81330dfbedbdebfa4a2542a9 (tree)
時間2022-02-26 07:53:57
作者kemono7h
Commiterkemono7h

Log Message

初版登録

Change Summary

差異

diff -r 000000000000 -r 439e0d87284e .classpath
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.classpath Sat Feb 26 07:53:57 2022 +0900
@@ -0,0 +1,6 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<classpath>
3+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
4+ <classpathentry kind="src" path="src"/>
5+ <classpathentry kind="output" path="bin"/>
6+</classpath>
diff -r 000000000000 -r 439e0d87284e .hgignore
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore Sat Feb 26 07:53:57 2022 +0900
@@ -0,0 +1,7 @@
1+syntax: regexp
2+^bin/
3+^logs/
4+^libs/
5+/~\$
6+^target/
7+
diff -r 000000000000 -r 439e0d87284e .project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.project Sat Feb 26 07:53:57 2022 +0900
@@ -0,0 +1,17 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<projectDescription>
3+ <name>DokonanJar</name>
4+ <comment></comment>
5+ <projects>
6+ </projects>
7+ <buildSpec>
8+ <buildCommand>
9+ <name>org.eclipse.jdt.core.javabuilder</name>
10+ <arguments>
11+ </arguments>
12+ </buildCommand>
13+ </buildSpec>
14+ <natures>
15+ <nature>org.eclipse.jdt.core.javanature</nature>
16+ </natures>
17+</projectDescription>
diff -r 000000000000 -r 439e0d87284e .settings/org.eclipse.jdt.core.prefs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.settings/org.eclipse.jdt.core.prefs Sat Feb 26 07:53:57 2022 +0900
@@ -0,0 +1,12 @@
1+eclipse.preferences.version=1
2+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
5+org.eclipse.jdt.core.compiler.compliance=1.8
6+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
7+org.eclipse.jdt.core.compiler.debug.localVariable=generate
8+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
9+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
10+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
11+org.eclipse.jdt.core.compiler.release=enabled
12+org.eclipse.jdt.core.compiler.source=1.8
diff -r 000000000000 -r 439e0d87284e src/jp/nanah/dnj/DokonanFrame.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jp/nanah/dnj/DokonanFrame.java Sat Feb 26 07:53:57 2022 +0900
@@ -0,0 +1,172 @@
1+package jp.nanah.dnj;
2+
3+import java.awt.BorderLayout;
4+import java.awt.Font;
5+
6+import javax.swing.JButton;
7+import javax.swing.JFrame;
8+import javax.swing.JPanel;
9+import javax.swing.JScrollPane;
10+import javax.swing.JTextArea;
11+import javax.swing.JTextField;
12+import javax.swing.border.EmptyBorder;
13+import javax.swing.event.ChangeEvent;
14+import javax.swing.event.ChangeListener;
15+import javax.swing.event.DocumentEvent;
16+import javax.swing.event.DocumentListener;
17+import javax.swing.text.Document;
18+
19+public class DokonanFrame {
20+
21+ /**
22+ * 入力完了待ち時間(msec)
23+ */
24+ public static final int INPUT_END_WAIT_MSEC = 200;
25+
26+ /**
27+ * Application Window
28+ */
29+ private JFrame frame;
30+
31+ /**
32+ * 結果表示エリア
33+ */
34+ private JTextArea resultArea;
35+
36+ /**
37+ * CopyButton
38+ */
39+ private JButton copyButton;
40+
41+ /**
42+ * 画面部品を作成&配置。
43+ */
44+ public void initComponent() {
45+ frame = new JFrame();
46+ frame.setSize(600, 300);
47+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
48+ frame.setTitle("DokonanJar - GradleのJarファイルを探す");
49+
50+ Font font = new Font("Meiryo UI", Font.PLAIN, 12);
51+
52+ //入力エリア
53+ {
54+ JTextField txtField = new JTextField();
55+ txtField.getDocument().addDocumentListener(new FiDocumentListener());
56+ txtField.setToolTipText("ここに入力した文字列を含むファイルを探します。空白区切りで複数条件");
57+ JPanel panel = new JPanel();
58+ panel.setBorder(new EmptyBorder(4,4,4,4));
59+ panel.setLayout(new BorderLayout());
60+ panel.add(txtField);
61+ frame.getContentPane().add(panel, BorderLayout.NORTH);
62+ }
63+
64+ //結果出力エリア
65+ {
66+ resultArea = new JTextArea();
67+ resultArea.setFont(font);
68+ resultArea.setEditable(false);
69+ JScrollPane scrollPane = new JScrollPane(resultArea);
70+ JPanel panel = new JPanel();
71+ panel.setBorder(new EmptyBorder(4,4,4,4));
72+ panel.setLayout(new BorderLayout());
73+ panel.add(scrollPane);
74+ frame.getContentPane().add(panel, BorderLayout.CENTER);
75+ }
76+
77+ //コピーボタン
78+ {
79+ copyButton = new JButton("コピー");
80+ JPanel panel = new JPanel();
81+ panel.setBorder(new EmptyBorder(4,4,4,4));
82+ panel.setLayout(new BorderLayout());
83+ panel.add(copyButton);
84+ frame.getContentPane().add(panel, BorderLayout.SOUTH);
85+
86+ }
87+ }
88+
89+ public JButton getCopyButton() {
90+ return copyButton;
91+ }
92+ public JTextArea getResultArea() {
93+ return resultArea;
94+ }
95+ public JFrame getFrame() {
96+ return frame;
97+ }
98+
99+ /**
100+ * クリック最新時刻
101+ */
102+ private long lasttime = 0;
103+
104+ private synchronized void setLastTime(long msec) {
105+ lasttime = msec;
106+ }
107+ private synchronized long getLastTime() {
108+ return lasttime;
109+ }
110+
111+ /**
112+ * 入力変更リスナー
113+ */
114+ private ChangeListener changeListener;
115+
116+ public void setChangeListener(ChangeListener listener) {
117+ changeListener = listener;
118+ }
119+
120+ /**
121+ * テキスト入力があったとき、入力が続いているときはそのまま終了する。
122+ * 入力が止まったらそのテキストを入力変更リスナーに通知する。
123+ */
124+ private class FiDocumentListener implements DocumentListener{
125+
126+ @Override
127+ public void insertUpdate(DocumentEvent e) {
128+ changedUpdate(e);
129+ }
130+
131+ @Override
132+ public void removeUpdate(DocumentEvent e) {
133+ changedUpdate(e);
134+ }
135+
136+ @Override
137+ public void changedUpdate(DocumentEvent e) {
138+ long msec = System.currentTimeMillis();
139+ setLastTime(msec);
140+
141+ Thread thread = new Thread() {
142+ @Override
143+ public void run() {
144+ try {
145+ while (true) {
146+ Thread.sleep(25);
147+ //新しい入力があれば何もせず終了
148+ if (getLastTime() != msec) {
149+ return;
150+ }
151+ //一定時間、新しい入力がなければ入力完了と判断
152+ long past = System.currentTimeMillis() - msec;
153+ if (past >= INPUT_END_WAIT_MSEC && copyButton.isEnabled()) {
154+ break;
155+ }
156+ }
157+ Document doc = e.getDocument();
158+ String s = doc.getText(0, doc.getLength());
159+ if (s.length() > 0) {
160+ changeListener.stateChanged(new ChangeEvent(s));
161+ }
162+ }catch (Throwable th) {
163+ th.printStackTrace();
164+ }
165+ }
166+ };
167+ thread.start();
168+ }
169+
170+ }
171+
172+}
diff -r 000000000000 -r 439e0d87284e src/jp/nanah/dnj/DokonanJar.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jp/nanah/dnj/DokonanJar.java Sat Feb 26 07:53:57 2022 +0900
@@ -0,0 +1,80 @@
1+package jp.nanah.dnj;
2+
3+import java.io.File;
4+import java.util.ArrayList;
5+import java.util.List;
6+import java.util.Properties;
7+
8+public class DokonanJar {
9+
10+ private String userHome;
11+
12+ private List<File> allJarList;
13+
14+ public DokonanJar(Properties prop) {
15+ userHome = System.getProperty("user.home");
16+ String dir = prop.getProperty("user.home");
17+ if (dir != null && dir.trim().length() > 0) {
18+ userHome = dir;
19+ }
20+ }
21+
22+ public List<File> initSearch() {
23+ allJarList = getAllJarForGradle();
24+ //System.out.println("全" + allJarList.size() + "ファイル");
25+ return allJarList;
26+ }
27+
28+ public List<File> getAllJarForGradle(){
29+ List<File> fileList = new ArrayList<File>();
30+ File gradleDir = new File(userHome, ".gradle");
31+ File[] dirs = gradleDir.listFiles();
32+ if (dirs != null) {
33+ for (File f : dirs) {
34+ String fname = f.getName();
35+ if (fname.equals("caches") || fname.equals("wrapper")) {
36+ searchFiles(f, null, fileList);
37+ }
38+ }
39+ }
40+ return fileList;
41+ }
42+
43+ public List<File> searchFiles(File dir, String path, List<File> fileList) {
44+ if (fileList == null) {
45+ fileList = new ArrayList<File>();
46+ }
47+ File[] files = dir.listFiles();
48+ if (files != null) {
49+ for (File f : files){
50+ String fname = f.getName();
51+ if (f.isFile()) {
52+ if (fname.endsWith(".jar") && fname.endsWith("sources.jar") == false) {
53+ //パス指定がなければ全ファイルを取得する
54+ if (path == null || fname.contains(path)) {
55+ fileList.add(f);
56+ }
57+ }
58+ }
59+ }
60+ for (File f : files){
61+ if (f.isDirectory()) {
62+ searchFiles(f, path, fileList);
63+ }
64+ }
65+ }
66+
67+ return fileList;
68+ }
69+
70+ public List<File> searchJarForGradle(String path){
71+ List<File> fileList = new ArrayList<File>();
72+ for (File f : allJarList) {
73+ if (f.getName().contains(path)) {
74+ fileList.add(f);
75+ }
76+ }
77+ return fileList;
78+ }
79+
80+}
diff -r 000000000000 -r 439e0d87284e src/jp/nanah/dnj/DokonanJarMain.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jp/nanah/dnj/DokonanJarMain.java Sat Feb 26 07:53:57 2022 +0900
@@ -0,0 +1,137 @@
1+package jp.nanah.dnj;
2+
3+import java.awt.event.ActionEvent;
4+import java.awt.event.ActionListener;
5+import java.io.File;
6+import java.io.FileInputStream;
7+import java.util.List;
8+import java.util.Properties;
9+
10+import javax.swing.JButton;
11+import javax.swing.event.ChangeEvent;
12+import javax.swing.event.ChangeListener;
13+
14+import jp.nanah.dnj.util.FileUtils;
15+
16+public class DokonanJarMain {
17+
18+ /**
19+ * ConfigurationFile
20+ */
21+ public static final String CONFIG_FILE = "doko.conf";
22+
23+ /**
24+ * 設定ファイル
25+ */
26+ private Properties prop = new Properties();
27+
28+ /**
29+ * Copy Output Folder
30+ */
31+ private File outputDir = new File("./libs");
32+
33+
34+ private List<File> resultFile;
35+
36+ private DokonanFrame dokoFrame = null;
37+
38+ private DokonanJar dokoJar = null;
39+
40+ /**
41+ * 設定値
42+ */
43+ public void initProp() {
44+ FileInputStream fis = null;
45+ try {
46+ File file = new File(CONFIG_FILE);
47+ if (file.exists() == false) {
48+ file.createNewFile();
49+ }
50+ fis = new FileInputStream(file);
51+ prop.load(fis);
52+ String path = prop.getProperty("output.dir");
53+ if (path != null && path.length() > 0) {
54+ outputDir = new File(path);
55+ if (outputDir.exists() == false) {
56+ outputDir.mkdirs();
57+ }
58+ }
59+ } catch (Throwable th) {
60+ th.printStackTrace();
61+ } finally {
62+ try {
63+ fis.close();
64+ } catch (Exception e) {}
65+ }
66+
67+ }
68+
69+ public void initFrame() {
70+ dokoFrame = new DokonanFrame();
71+ dokoFrame.initComponent();
72+ JButton button = dokoFrame.getCopyButton();
73+ button.addActionListener(new CopyButtonActionListener());
74+ Thread thread = new Thread(){
75+ @Override
76+ public void run(){
77+ button.setEnabled(false);
78+ dokoJar = new DokonanJar(prop);
79+ dokoJar.initSearch();
80+ button.setEnabled(true);
81+ }
82+ };
83+ thread.start();
84+ dokoFrame.setChangeListener(new TextChangeListener());
85+ dokoFrame.getFrame().setVisible(true);
86+ }
87+
88+ private class CopyButtonActionListener implements ActionListener {
89+ @Override
90+ public void actionPerformed(ActionEvent e) {
91+ if (resultFile == null) {
92+ return;
93+ }
94+
95+ for (File f : resultFile) {
96+ try {
97+ byte[] by = FileUtils.readBytes(f);
98+ File dstFile = new File(outputDir, f.getName());
99+ FileUtils.writeBytes(dstFile, by);
100+ dstFile.setLastModified(f.lastModified());
101+ } catch (Throwable th) {
102+ th.printStackTrace();
103+ }
104+ }
105+ }
106+ }
107+
108+ private class TextChangeListener implements ChangeListener {
109+ @Override
110+ public void stateChanged(ChangeEvent e) {
111+ String text = (String)e.getSource();
112+ searchFiles(text);
113+ }
114+ }
115+
116+
117+ public void searchFiles(String path) {
118+ resultFile = dokoJar.searchJarForGradle(path);
119+ StringBuilder sb = new StringBuilder();
120+ if (resultFile != null) {
121+ for (File f : resultFile) {
122+ //System.out.println(">>" + f.getAbsolutePath());
123+ if (sb.length() > 0) {
124+ sb.append("\n");
125+ }
126+ sb.append(f.getAbsolutePath());
127+ }
128+ }
129+ dokoFrame.getResultArea().setText(sb.toString());
130+ }
131+
132+ public static void main(String[] args) {
133+ DokonanJarMain app = new DokonanJarMain();
134+ app.initProp();
135+ app.initFrame();
136+ }
137+}
diff -r 000000000000 -r 439e0d87284e src/jp/nanah/dnj/util/FileUtils.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jp/nanah/dnj/util/FileUtils.java Sat Feb 26 07:53:57 2022 +0900
@@ -0,0 +1,291 @@
1+package jp.nanah.dnj.util;
2+
3+
4+import java.io.BufferedInputStream;
5+import java.io.BufferedOutputStream;
6+import java.io.File;
7+import java.io.FileInputStream;
8+import java.io.FileOutputStream;
9+import java.io.IOException;
10+import java.io.InputStreamReader;
11+import java.io.OutputStreamWriter;
12+import java.util.ArrayList;
13+import java.util.List;
14+
15+
16+public class FileUtils {
17+
18+ /**
19+ * ファイルの有無を判定します。
20+ * ファイルがない場合で例外出力指定の時のみ例外を発行します。
21+ * @param file 判定するファイル
22+ * @param exception ファイルが無い時に例外を発行するかどうか。trueなら発行
23+ * @return ファイルがあればtrue、なければfalse
24+ */
25+ public static boolean exists(File file, boolean exception){
26+ if (file == null){
27+ if (exception == true){
28+ throw new IllegalArgumentException("ファイルが[null]です。");
29+ }
30+ return false;
31+ }
32+ if (file.exists() == false){
33+ if (exception == true){
34+ throw new IllegalArgumentException(
35+ "ファイル[" + file.getAbsolutePath() + "]がありません");
36+ }
37+ return false;
38+ }
39+ return true;
40+ }
41+
42+ /**
43+ * ファイルを読み込んで文字配列を返します。
44+ * 行の最後に含まれる \n または \r\n は削除されて返されます。
45+ * ファイルが無い場合はサイズ0の配列を返します。
46+ */
47+ public static String[] readFile(File file) {
48+ return readFile(file, null);
49+ }
50+
51+ /**
52+ * ファイルを読み込んで文字配列を返します。
53+ * 行の最後に含まれる \n または \r\n は削除されて返されます。
54+ * ファイルが無い場合はサイズ0の配列を返します。
55+ * @param charsetName 文字コード
56+ */
57+ public static String[] readFile(File file, String charsetName) {
58+ if (exists(file, false) == false){
59+ return new String[0];
60+ }
61+
62+ FileInputStream fis = null;
63+ InputStreamReader isr = null;
64+ List lines = new ArrayList();
65+ try{
66+ fis = new FileInputStream(file);
67+ if ( charsetName == null ){
68+ isr = new InputStreamReader(new BufferedInputStream(fis));
69+ } else {
70+ isr = new InputStreamReader(new BufferedInputStream(fis), charsetName);
71+ }
72+ lines = _loadLines(isr);
73+ } catch (Exception e){
74+ e.printStackTrace();
75+ }
76+ try{
77+ if (isr != null){
78+ isr.close();
79+ }
80+ } catch (Exception e){
81+ e.printStackTrace();
82+ }
83+ return (String[]) lines.toArray(new String[0]);
84+ }
85+
86+ /**
87+ * ストリームからデータを読み込んで文字列の配列として返します。
88+ * @param isr 読み込み用ストリーム
89+ * @return 読み込んだ文字列。1行が配列1つ分。
90+ */
91+ private static List _loadLines(InputStreamReader isr){
92+ List lines = new ArrayList();
93+ StringBuffer sb = new StringBuffer(100);
94+ try{
95+ boolean is0d = false;
96+ while (true){
97+ int c = isr.read();
98+ //改行があったとき、
99+ //最後まで読み込んだときに吐き出していない文字列があった時、
100+ //\rだけで改行がこない時
101+ //に文字列を1行分のデータとして吐き出します
102+ if (c == '\n' || (c == -1 && sb.length() > 0) || is0d == true){
103+ lines.add(sb.toString());
104+ if (sb.length() > 0){
105+ sb = new StringBuffer();
106+ if (is0d == true && (c != '\n' && c != -1)){
107+ sb.append((char) c);
108+ }
109+ }
110+ is0d = false;
111+ } else {
112+ if (c == '\r'){
113+ is0d = true;
114+ } else {
115+ sb.append((char) c);
116+ }
117+ }
118+ if (c == -1){
119+ break;
120+ }
121+ }
122+ } catch (IOException e){
123+ //ファイル読み込み終了
124+ } catch (Exception e){
125+ e.printStackTrace();
126+ }
127+ return lines;
128+ }
129+
130+ /**
131+ * ファイルを読み込んで文字配列を返します。
132+ * ファイルが無い場合はサイズ0の配列を返します。
133+ * @param file 読み込むファイル
134+ * @return 読み込んだバイト配列
135+ */
136+ public static byte[] readBytes( File file ) {
137+ if ( exists( file, false ) == false ) {
138+ return new byte[0];
139+ }
140+
141+ BufferedInputStream in = null;
142+ byte[] by = new byte[(int) file.length()];
143+ try {
144+ in = new BufferedInputStream( new FileInputStream( file ) );
145+ int c = in.read( by );
146+ } catch ( Exception e ) {
147+ e.printStackTrace();
148+ }
149+ try {
150+ if ( in != null ) {
151+ in.close();
152+ }
153+ } catch ( Exception e ) {
154+ e.printStackTrace();
155+ }
156+ return by;
157+ }
158+
159+ //---------------------------------------------
160+ // データ保存
161+ //---------------------------------------------
162+
163+ /**
164+ * 文字配列をファイルに書き込みます。
165+ */
166+ public static void writeFile(File file, String[] lines){
167+ writeFile(file, lines, null, false);
168+ }
169+
170+ /**
171+ * 文字配列をファイルに書き込みます。
172+ */
173+ public static void writeFile(File file, String[] lines, String charsetName){
174+ writeFile(file, lines, charsetName, false);
175+ }
176+
177+ /**
178+ * 文字配列をファイルに書き込みます。
179+ * 改行コードが末尾に含まれない場合は勝手に付加します。
180+ * 付加する文字コードはWindowsの場合は\r\n、それ以外は\n固定です。
181+ * @param append true の場合、バイトはファイルの先頭ではなく最後に書き込まれる
182+ */
183+ public static void writeFile(File file, String[] lines, String charsetName, boolean append){
184+ FileOutputStream fos = null;
185+ OutputStreamWriter osw = null;
186+ boolean isWindows = System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0;
187+ try{
188+ if (file.getParentFile() != null) {
189+ file.getParentFile().mkdirs();
190+ }
191+ fos = new FileOutputStream(file, append);
192+ if ( charsetName == null ){
193+ osw = new OutputStreamWriter(new BufferedOutputStream(fos));
194+ } else {
195+ osw = new OutputStreamWriter(new BufferedOutputStream(fos), charsetName);
196+ }
197+ for (int i=0; i<lines.length; i++){
198+ osw.write(lines[i]);
199+ //最終行以外は改行をつけます
200+ //if (i < (lines.length - 1)){
201+ //↑これをすると追加時にうまくいかないのでやめます。
202+ if (lines[i].endsWith("\n") == false){
203+ if (isWindows){
204+ osw.write("\r\n");
205+ } else {
206+ osw.write("\n");
207+ }
208+ }
209+ //}
210+ }
211+ } catch (Exception e){
212+ e.printStackTrace();
213+ }
214+ try{
215+ if (osw != null){
216+ osw.flush();
217+ osw.close();
218+ }
219+ } catch (Exception e){
220+ e.printStackTrace();
221+ }
222+ }
223+
224+ /**
225+ * ファイルを書き込みます。
226+ * ファイルが無ければ新規作成します。
227+ * @param file 書き込み先ファイル
228+ * @param by 書き込むデータ
229+ */
230+ public static void writeBytes( File file, byte[] by ) {
231+ writeBytes( file, by, by.length );
232+ }
233+
234+ /**
235+ * ファイルを書き込みます。
236+ * ファイルが無ければ新規作成します。
237+ * @param file 書き込み先ファイル
238+ * @param by 書き込むデータ
239+ */
240+ public static void writeBytes( File file, byte[] by, int len ) {
241+ if ( exists( file, false ) == false ) {
242+ try{
243+ file.createNewFile();
244+ } catch (Throwable th){
245+ th.printStackTrace();
246+ return;
247+ }
248+ }
249+
250+ BufferedOutputStream out = null;
251+ try {
252+ out = new BufferedOutputStream( new FileOutputStream( file ) );
253+ out.write( by, 0, len );
254+ } catch ( Exception e ) {
255+ e.printStackTrace();
256+ }
257+ try {
258+ if ( out != null ) {
259+ out.close();
260+ }
261+ } catch ( Exception e ) {
262+ e.printStackTrace();
263+ }
264+ }
265+
266+ //---------------------------------------------
267+ // ディレクトリ削除
268+ //---------------------------------------------
269+
270+ /**
271+ * ファイルが渡された場合は、そのファイルを削除します。
272+ * ディレクトリが渡された場合は、そのディレクトリ配下を全て削除します。
273+ * @param file ファイルまたはディレクトリ
274+ * @since Ver 1.03
275+ */
276+ public static void delete(File file){
277+ if (file.exists() == false){
278+ return;
279+ }
280+ //ディレクトリ内のファイルを再帰的に削除
281+ if (file.isDirectory() == true){
282+ File[] lists = file.listFiles();
283+ for (int i=0; i<lists.length; i++){
284+ delete(lists[i]);
285+ }
286+ }
287+ //ディレクトリまたはファイルを削除
288+ file.delete();
289+ }
290+
291+}
\ No newline at end of file