アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在JAVAの学習を行っています。
課題で行き詰ったので質問をさせていただきます。

私が作成しようとしているプログラムは
JAVA言語を使って指定したディレクトリ内に存在する
ファイルやディレクトリを全てCSVファイルに出力するといったプログラムです

import java.io.*;

//指定したディレクトリ内に存在するファイルを表示するプログラム

public class fileIn {
public static void main(String args[]) throws IOException {

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader kbd = new BufferedReader(isr);
String path;
path = kbd.readLine();
File cdirectory = new File(path);

//ディレクトリかファイルはを判定し、
//ディレクトリの場合、そのディレクトリの中身を確認
//ファイルの場合、ファイル名を表示

File filelist[] = cdirectory.listFiles();
for(int i =0; i<filelist.length;i++) {
if(filelist[i].isDirectory()){
System.out.println("[ディレクトリ]" + filelist[i].getName());
}else if(filelist[i].isFile()){
System.out.println("[ファイル]" + filelist[i].getName());
}else{
System.out.println("不明ファイル" + filelist[i].getName());
}
System.out.println(filelist[i]);
}
}
}

現在ここまでは出来ているのですがif文でディレクトリかファイルか判定する所まで
出来上がりましたが、ディレクトリだった場合、そのディレクトリの中を見ることが
出来ません。どのようにしたら良いでしょう。CSVファイルに出力結果を書き込む
方法もわかりません。教えてください。

A 回答 (3件)

質問の要点は


(1)CSVファイルへの書き込み法
(2)フォルダー(ディレクトリ)のたどり方
でしょうか?
CSVファイルにどのような内容を書き込めばよいかが質問からは不明ですが,
両方を知る参考にプログラム例を載せます.

import java.io.*;

//指定したディレクトリ内に存在するファイルを表示するプログラム

public class fileIn {
static PrintWriter pw;
static void walkFolder(String path) {
File files=new File(path); //これから調べるフォルダー
File filelist[] = files.listFiles();
System.out.println("path="+path+" filelist.length="+filelist.length);
for(int i =0; i<filelist.length;i++) {
if(filelist[i].isDirectory()){
System.out.println("[ディレクトリ]" + filelist[i].getName());
pw.printf("\"%s\",\"ディレクトリ\"\n",filelist[i].getName());
walkFolder(path+"\\"+filelist[i].getName());
}else if(filelist[i].isFile()){
System.out.println("[ファイル]" + filelist[i].getName());
pw.printf("\"%s\",\"ファイル\"\n",filelist[i].getName());
}else{
System.out.println("不明ファイル" + filelist[i].getName());
pw.printf("\"%s\",\"不明ファイル\"\n",filelist[i].getName());
}
// System.out.println(filelist[i]);
}
}
public static void main(String args[]) throws IOException {

//InputStreamReader isr = new InputStreamReader(System.in);
//BufferedReader kbd = new BufferedReader(isr);
//String path;
//path = kbd.readLine();
if(args.length < 2) { //引数が足りなければエラーメッセージを表示
System.err.println("Usage :java fileIn look-folder csv-file");
System.exit(1);
}
pw=new PrintWriter(args[1]); //CSV出力ファイル
pw.println("\"名前\",\"属性\""); //csvのヘッダー
walkFolder(args[0]);

//ディレクトリかファイルはを判定し、
//ディレクトリの場合、そのディレクトリの中身を確認
//ファイルの場合、ファイル名を表示

pw.close();
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます!!
参考にさせていただきます。このプログラムを
一旦自分なりに理解してみようと思います
とても参考になるプログラムをありがとうございました

お礼日時:2011/01/17 15:43

具体例を挙げます。


java Sample ディレクトリ名
で実行する例です。

--------------------------------------------


import java.io.*;
class Sample {
public static void main(String[] args){
File f= new File(args[0]);
String[] cont = f.list();
for(String s:cont){
File f2 = new File(f,s);
if(f2.isFile()) System.out.println(s);
}
}
}
    • good
    • 0
この回答へのお礼

ありがとうございました。
参考にさせていただきます

お礼日時:2011/01/14 13:11

ディレクトリ内をどんどん潜っていく処理は 『再起処理』 という方法で作るのが一般的です。

google 等で "JAVA 再起 ディレクトリ" あたりのワードで検索すれば、いくらでもサンプルが見つかりますので、そちらを参考にしてください。

また、CSV 出力についてもまずは google 検索しましょう。"JAVA CSV" あたりで調べればサンプルが見つかると思いますよ。


私見ですが、プログラムの勉強の中で最も重要なのは "解決能力" だと思います。一般的な問題は、ネット上で本気で探せば、だいたい解決策が見つかるものです。google 等でどのような検索ワードで探せばサンプルや解決策が見つかるのか、どんどん試してください。そのうち、感覚的にわかってくるようになりますから。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!!
がんばって検索して解決してみます。

お礼日時:2011/01/13 15:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!