質問編集履歴

1

全体のコードを張りました。コードが長いのでとりあえずという形で4つに分けました.

2019/11/15 14:56

投稿

Jhon_McClane
Jhon_McClane

スコア48

test CHANGED
File without changes
test CHANGED
@@ -1 +1,297 @@
1
+ ```ここに言語を入力
2
+
3
+ コードimport java.io.File;
4
+
5
+ import java.io.IOException;
6
+
7
+ import java.io.BufferedWriter;
8
+
9
+ import java.io.PrintWriter;
10
+
11
+ import java.io.FileWriter;
12
+
13
+ import java.io.FileReader;
14
+
15
+ import java.io.BufferedReader;
16
+
17
+ import java.util.Scanner;
18
+
19
+ import java.io.FileNotFoundException;
20
+
21
+
22
+
23
+ public class Show{
24
+
25
+ public void act(File[] findList){ //インスタンスメソッド
26
+
27
+ try{
28
+
29
+ FileWriter fw = inPutName();
30
+
31
+ // FileWriter fw = new FileWriter(fileOut, true);//true追記 false前のを消して上書き
32
+
33
+ PrintWriter pw = new PrintWriter(new BufferedWriter(fw));
34
+
35
+
36
+
37
+ for(int i=0;i<findList.length;i++){
38
+
39
+ //ファイルの絶対パスの取得
40
+
41
+ pw.println("絶対パス:" + findList[i].getAbsolutePath());
42
+
43
+
44
+
45
+ //ファイル名の取得
46
+
47
+ pw.println("ファイル名:" + findList[i].getName());
48
+
49
+
50
+
51
+ //ファイルの行数の取得
52
+
53
+ BufferedReader br = new BufferedReader(new FileReader(findList[i]));
54
+
55
+ int nLine =0;
56
+
57
+ while(br.ready()){
58
+
59
+ String line = br.readLine();
60
+
61
+ nLine++;
62
+
63
+ }
64
+
65
+ pw.println("行数:"+nLine);
66
+
67
+
68
+
69
+ // ファイルに含まれるクラス名
70
+
71
+ String getClassName = findList[i].getClass().getSimpleName();
72
+
73
+ // pw.println(getClassName);
74
+
75
+
76
+
77
+ //ファイルに含まれるパッケージ宣言を取得
78
+
79
+ // pw.println(クラス名.class.getPackageName());
80
+
81
+ //ファイルに含まれる import クラス名
82
+
83
+ }
84
+
85
+ pw.close();
86
+
87
+ }catch(FileNotFoundException e){
88
+
89
+ System.out.println(e);
90
+
91
+ }catch(IOException e){
92
+
93
+ System.out.println(e);
94
+
95
+ }
96
+
97
+ }
98
+
99
+
100
+
101
+ public static FileWriter inPutName(){ //クラスメソッド
102
+
103
+ try{
104
+
105
+ System.out.print("出力ファイル名を入力:");
106
+
107
+ Scanner input = new Scanner(System.in);
108
+
109
+ String output = input.nextLine();
110
+
111
+ File fileOut= new File(output+".txt");
112
+
113
+ if(fileOut.exists()){
114
+
115
+ System.out.println(output+".txtはすでに存在しています.以下から操作を選んでください");
116
+
117
+ System.out.println("1:追記する 2:名前を変える 3:前のデータを消去して上書きする");
118
+
119
+ int judge = new Scanner(System.in).nextInt();
120
+
121
+ switch (judge) {
122
+
123
+ case 1:
124
+
125
+ return new FileWriter(fileOut, true);//true追記 false前のを消して上書き
126
+
127
+ case 2:
128
+
129
+ inPutName();
130
+
131
+ //break;
132
+
133
+ case 3:
134
+
135
+ return new FileWriter(fileOut, false);//true追記 false前のを消して上書き
136
+
137
+ }
138
+
139
+ }else{
140
+
141
+ System.out.println("ファイルが存在しないので新しく作成しました.");
142
+
143
+ fileOut.createNewFile();
144
+
145
+ return new FileWriter(fileOut, true);//true追記 false前のを消して上書き
146
+
147
+ }
148
+
149
+ }catch(IOException e){
150
+
151
+ System.out.println(e);
152
+
153
+ }
154
+
155
+ }
156
+
157
+
158
+
159
+ }
160
+
161
+
162
+
163
+ import java.io.File;
164
+
165
+ import java.util.Scanner;
166
+
167
+
168
+
169
+ class FileSearch{
170
+
171
+ public static void main(String[] args){
172
+
173
+ System.out.println("一覧を生成するディレクトリ名:");
174
+
175
+ Scanner scan = new Scanner(System.in);
176
+
177
+ String str = scan.next();
178
+
179
+
180
+
181
+ //探すディレクトリ
182
+
183
+ File file = new File("/home");
184
+
185
+ if(!file.exists()){
186
+
187
+ System.out.println("ディレクトリが存在しません.");
188
+
189
+ System.exit(1);
190
+
191
+ }
192
+
193
+
194
+
195
+ SearchAlgorithm sa = new SearchAlgorithm();
196
+
197
+ sa.Search(file,str);
198
+
199
+ }
200
+
201
+ }
202
+
203
+
204
+
205
+ import java.util.LinkedList;
206
+
207
+ import java.io.File;
208
+
209
+ import java.io.FilenameFilter;
210
+
211
+
212
+
213
+ public class SearchAlgorithm{
214
+
215
+ public void Search(File file,String str){
216
+
217
+ LinkedList<File> que = new LinkedList<File>();
218
+
219
+ que.offer(file);
220
+
221
+ while(que.size() != 0){//Queのサイズが0出ない(空っぽでない)ならープ
222
+
223
+ File dir = que.poll();
224
+
225
+ File[] dirList = dir.listFiles();
226
+
227
+ for(int i=0;i<dirList.length;i++){
228
+
229
+ if(dirList[i].isDirectory()){//ディレクトリか
230
+
231
+ String dirName = dirList[i].getName();
232
+
233
+ if(!dirName.equals(str)){//名前が一致しない
234
+
235
+ que.offer(dirList[i]);
236
+
237
+ }else{ //名前が一致
238
+
239
+ //取り出すディレクトリの処理
240
+
241
+ que.clear();//Que を空っぽにする
242
+
243
+ que.offerFirst(dirList[i]);//見つけたディレクトリをQueに入れる
244
+
245
+ File finding = que.poll();//Queから取り出し,sizeが0になる(空っぽになる)->while文を抜けられる
246
+
247
+ File[] findList = finding.listFiles(new FileFilter());
248
+
249
+ Show s = new Show();
250
+
251
+ s.act(findList);
252
+
253
+ }
254
+
255
+ }
256
+
257
+ }
258
+
259
+ }
260
+
261
+ }
262
+
263
+ }
264
+
265
+
266
+
267
+ import java.io.File;
268
+
269
+ import java.io.FilenameFilter;
270
+
271
+
272
+
273
+ class FileFilter implements FilenameFilter{
274
+
275
+
276
+
277
+ public boolean accept(File dir, String name) {
278
+
279
+
280
+
281
+ if(name.endsWith("java")){
282
+
283
+ return true;
284
+
285
+ }else{
286
+
287
+ return false;
288
+
289
+ }
290
+
291
+ }
292
+
293
+ }
294
+
295
+
296
+
1
- 指定したディレクトリに存在するjavaファイルをlistFiles(new Filefilter())で抜き出し,引っかかった全てのファイルのクラス名を取得したいです。調べてみると実行中のクラス名の取得方法は分かったのですが実行中でないファイルのクラス名の取得方法がわかりません。
297
+ ```指定したディレクトリに存在するjavaファイルをlistFiles(new Filefilter())で抜き出し,引っかかった全てのファイルのクラス名を取得したいです。調べてみると実行中のクラス名の取得方法は分かったのですが実行中でないファイルのクラス名の取得方法がわかりません。