質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

646閲覧

リストアップしたファイルのコピー

kabutohyper

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/08/26 09:26

編集2019/08/27 00:40

下記のように、フォルダからテキストファイル抽出し、抽出したファイルの内容を1つのテキストファイルに読み書きしようとしたのですが、上手くいきません。
テキストファイルの抽出は、コンソール上に記すことができました。
しかし、抽出したファイルの読み書きにおいて、別のメソッド(readFileメソッド)で処理しようとしましたが、
読み込みさえも行われないという状況です。オブジェクトの生成で、java.io.FileNotFoundException: C:\Users\nakamura\Documents\テキスト (アクセスが拒否されました。)が出て、はじかれてしまいました。
また、引数に関して、fromPathの引数をC:\Users\nakamura\Documents\テキストというフォルダ名とし、 toPathの引数をC:\Users\nakamura\Documents\テキスト\sample.txtとあらかじめ設定しました。
プログラムの内容を詳しく説明いたしますと、C:\Users\nakamura\Documents\テキストにあるテキストファイルをリストアップし、リストアップしたファイルの内容をC:\Users\nakamura\Documents\テキスト\sample.txtにコピーさせるというプログラムを作ろうとしています。
やり方として、恐らく読み込み元の引数をフォルダ名にしているため、上手くいかないのだろうと考えます。
しかし、どう改善すれば出力されるのか分からないので、教えていただけると幸いです。
よろしくお願い致します。

package

1 2import java.io.BufferedReader; 3import java.io.File; 4import java.io.FileInputStream; 5import java.io.FileOutputStream; 6import java.io.FileReader; 7import java.io.FileWriter; 8import java.io.IOException; 9import java.io.InputStreamReader; 10import java.io.OutputStreamWriter; 11import java.io.PrintWriter; 12public class FileSearch2 { 13 14 public static void main(String[] args) { 15 // TODO 自動生成されたメソッド・スタブ 16 17 //変数の初期化 18 String fromPath = ""; 19 String toPath = ""; 20 21 //コマンドライン引数 22 fromPath = args[0]; 23 toPath = args[1]; 24 25 File dir = new File(fromPath); 26 File[] files = dir.listFiles(); 27 28 29 for (int i = 0; i < files.length; i++) { 30 if(files[i].isFile() && files[i].getName().endsWith(".txt")) { 31 System.out.println(files[i]); 32 33 } 34 } 35 36 readFile(fromPath, toPath); 37 38 } 39 40 private static void readFile(String fromPath, String toPath) { 41 // TODO 自動生成されたメソッド・スタブ 42 try { 43 44 File file = new File(toPath); 45 46 //ファイルの存在確認 47 if(!file.exists()) { 48 System.out.println("ファイルを作成します。"); 49 return; 50 } else { 51 System.out.println("ファイルを上書きします。"); 52 } 53 54 55 //配列の定義 56 int a = 0; 57 String[] text = new String[a]; 58 int h =0; 59 String line; 60 61 //読み込みオブジェクトの生成する 62 FileReader fr = new FileReader(fromPath); 63 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fromPath), "Shift-JIS")); 64 65 //ファイルの読み込み 66 while ((line = br.readLine()) != null) { 67 text[h] = line; 68 h++; 69 } 70 71 //書き込みオブジェクトの生成 72 FileWriter fw = new FileWriter(toPath); 73 PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(toPath), "Shift-JIS")); 74 75 //ファイルの書き込み 76 for (int k = 0; k < text.length; k++) { 77 pw.write(text[k]); 78 pw.write("\r\n"); 79 } 80 81 //ストリームをフラッシュ 82 pw.flush(); 83 84 //ファイルクローズ 85 pw.close(); 86 fw.close(); 87 br.close(); 88 fr.close(); 89 90 System.out.println("コピーが完了しました。"); 91 92 } catch (IOException e) { 93 System.out.println("読み込みに失敗しました。"); 94 } 95 96 } 97}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/08/26 09:29

うまく行かないとはどうなるんでしょうか。 そこらへん詳しく質問に追記してください
guest

回答2

0

ベストアンサー

抽出したファイルの読み書きにおいて、別のメソッド(readFileメソッド)で処理しようとしました

File dir = new File(fromPath); File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { if(files[i].isFile() && files[i].getName().endsWith(".txt")) { System.out.println(files[i]); } } readFile(fromPath, toPath);

表示ではファイルを「抽出」していますが, readFile には渡っていませんし, readFile 内でも「抽出」していません. ですので, ご想像の動作をするようなコードにはなっていません.

//ファイルの存在確認 if(!file.exists()) { System.out.println("ファイルを作成します。"); return; } else { System.out.println("ファイルを上書きします。"); }

ファイルが無かった場合「ファイルを作成します。」と表示して return し, 何の処理も行いません. これは想定した動作とは思えません.

//配列の定義 int a = 0; String[] text = new String[a]; : //ファイルの読み込み while ((line = br.readLine()) != null) { text[h] = line; h++; }

text 配列にファイルを全行読み込むにも関わらず, 配列のサイズは 0 です. これでは読み込みは不可能です.

//読み込みオブジェクトの生成する FileReader fr = new FileReader(fromPath); : //書き込みオブジェクトの生成 FileWriter fw = new FileWriter(toPath);

どちらも使用されていません.

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fromPath), "Shift-JIS"));

フォルダそのものを読もうとしています.

} catch (IOException e) { System.out.println("読み込みに失敗しました。"); }

IOException は読み込み以外でも発生しえます.

投稿2019/08/30 01:25

jimbe

総合スコア12646

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kabutohyper

2019/08/30 02:25

回答ありがとうございます。 解決しました。
guest

0

ファイルが見つからない、という例外なんで、
readFileの引数の fromPath, toPath をプリントアウトするなりして、どんなパスが入ってるのか確認してみればどうでしょう

投稿2019/08/26 09:45

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kabutohyper

2019/08/27 00:41

質問内容に不備があり、修正いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問