• ベストアンサー

FileWrite()メソッド

すいません、少しお時間を頂きたいと思います。今コマンドライン上でファイルを作ろうとしています。ソースは結城浩氏の著書で使われている、ネット上から無料でダウンロードできるソースを使っています。以下の通りです。 import java.io.*; public class FileWrite{ public static void main(String[] args) { if (args.length != 1) { System.out.println("使用法:java WriteFile1 作成ファイル"); System.out.println("例:java WriteFile1 output.txt < input.txt"); System.exit(0); } String filename = args[0]; try { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filename))); String line; while ((line = reader.readLine()) != null) { writer.println(line); } reader.close(); writer.close(); } catch (IOException e) { System.out.println(e); } } } ところが、これをコンパイルして実行までは出来るのですが、いざ因数(=ファイル名)を与えるとコマンドプロンプトがプロンプトのない状態で停止してしまいます。 javacのあるディレクトリ>java FileWrite abc.jsp と入力しています。(FileWriteはクラス名です。) また、拡張子の有無は関係ないようです。 何が悪いのでしょうか? よろしくお願いします。

  • Java
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>コピーしたことになるのでしょうか。。 そうですね。コピーしたことになります。 >ただ、キーボードからの入力はどうすればいいのか分かりませんでした。 キーボードからの入力の場合 java FireWrite output.txt として入力待ちになったら適当に文字を入力(改行もOK)して Windows の場合 CTRL+Z を押すと入力終了できます。 >また、コピーではなく指定した内容を新しいファイルに書き出すことは出来ないでしょうか? 意味がよくわかりませんが、 キーボードからの入力をファイルに書き出すという意味なら前述の通りです。 ファイルの一部、最初から10行とか最後の10行という場合には、 引数としてそういうコマンドを受け付けるようにして、プログラムでそのような処理をします。

javatea_1985
質問者

お礼

何度もアドバイスありがとうございました。 答えて頂いたことがまさに聞きたいことでした。 本当に助かります。ヽ(*⌒∇⌒*)ノ:: ファイルの一部を表示するために因数を受け付けるプログラミング化する方法もお聞きしたい気持ちもあるのですが、長くなりすぎるので一旦この質問を終了します。また教えて下さい。(ctrl+cで終了できました。)

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>ご回答頂いた「java FileWrite abc.jsp < abc.zip」のabc.jspは、(1)はじめに用意しておく必要がありますか?(2)どこに作成されますか(FileWrite.class)のあるフォルダでしょうか? また、abc.zipは何をどこに用意すればいいのでしょうか? (1) abc.jsp は、これから作成されるファイルなので、あらかじめ存在する必要はないです。 (2) カレントディレクトリに作成される。と思います。 FileWrite.class のあるフォルダというより、 java FileWrite を実行しているフォルダ。 >abc.zipは何をどこに用意すればいいのでしょうか? 新しくファイル名を付けたいファイルをカレントディレクトリに。 abc.zip は、例として書いただけなので、特に意味はありません。 src.txt でもなんでもいいです。 出力ファイルの元になるファイルです。 リダイレクトしない場合には、キーボードからの入力がそのままファイル出力になることになります。

javatea_1985
質問者

補足

できました! input.txtを用意し、内容を「ジローニモ犬」としました。 次にコマンドで「java FileWrite output.txt < input.txt」とすると同一内容を持ったoutput.txtというファイルが作成されました。コピーしたことになるのでしょうか。。 ただ、キーボードからの入力はどうすればいいのか分かりませんでした。 また、コピーではなく指定した内容を新しいファイルに書き出すことは出来ないでしょうか? 何度も質問してしまい申し訳ありません。m(__)m

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

このプログラムは、標準入力からの入力にファイル名を付けて保存するプログラムです。 System.in が標準入力になります。 そのために、 java FileWrite abc.jsp のように実行した場合にはキー入力(標準入力は、キーボード)待ちになります。 プログラム中の使用法のようにファイルから標準入力を与えたい場合は、 java FileWrite abc.jsp < abc.zip のように標準入力をリダイレクトする必要があります。

javatea_1985
質問者

補足

ありがとうございます。 問題点がどこなのか見えてきました。 ただ、「java FileWrite 標準出力」で検索してみてもキーボードやコマンドラインからの入力例しか出てきません。ご回答頂いた「java FileWrite abc.jsp < abc.zip」のabc.jspは、(1)はじめに用意しておく必要がありますか?(2)どこに作成されますか(FileWrite.class)のあるフォルダでしょうか? また、abc.zipは何をどこに用意すればいいのでしょうか?自分でも探してみますが、教えていただきたいです。よろしくお願いします。m(__)m

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.1

この場合 class名がFileWriteですので コンパイルには>javac FileWrite.java 実行時は >java FileWrite となるはずです。

javatea_1985
質問者

お礼

ご解答ありがとうございます。 コンパイルするときにクラス名とファイル名は一致させるよう気をつけます。 m(__)m

関連するQ&A

  • Vectorの使用法

    現在、課題の作成中なんですけどうまくいかないので教えてください。 ファイルに表示されているアクセスログファイルを別のファイルに表示させるコードなんですが、 import java.util.*; import java.io.*; public class AccessLog{   public static void main(String args[]){     if(args.length != 1){  System.exit(0);     }     String filename = args[0];     Vector vector = new Vector();     try{      String line ; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filename))); while((line = reader.readLine()) != null){ vector.addElement(line); writer.println(vector); } }catch(IOException e){   System.out.println(e); }   } } Vectorの使い方がよくわからないので教えてください。宜しくお願いします。

  • Java初心者です。どうぞお教えください。

    CSVファイルを読み込んで、ソートしてから、現在日時のファイル名でCSVで書き出します。以下のファイルでは、CSVで書き出せません。現在日時のファイル名をつける方法もよくわかりません。どうぞ教えてください。importは省略しています。 public class CSVdata { public static void main(String[] args) { String fname = " " ; ArrayList<String> list = new ArrayList<String>(); String save_filename = getFileName(); if(args.length>0) { fname = args[0]; } try { BufferedReader reader = new BufferedReader( new FileReader(fname) ); String Line = null; while ((Line = reader.readLine()) != null) { list.add(Line); } reader.close(); Collections.sort(list ); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(save_filename + ".csv"))); for (String string : list) { writer.println(string); } writer.close(); } catch (FileNotFoundException e) { System.out.println("ファイルがありません"); } catch (IOException e) { System.out.println("ファイルがありません"); } } public static String getFileName(){ Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); return sdf.format(d); } }

  • ファイル読み込みで

    市販のテキストでファイルを読み込むプログラムを作ったのですがうまくできません。 import java.io.*; public class ShowFile{ public static void main(String args[]){ if(args.length != 1){ System.out.println("使用法: java ShowFile ファイル"); System.out.println("例: java ShowFile ShowFile.java"); System.exit(0); } String filename = args[0]; try{ BufferedReader reader = new BufferedReader(new FileReader(filename)); String line; while((line = reader.readLine()) != null){ System.out.println(line); } reader.close(); }catch(FileNotFoundException e){ System.out.println(filename + "が見つかりません"); }catch(IOException e){ System.out.println(e); } } } javac ShowFile.javaでコンパイルはうまくいったのですが、 実行時にjava ShowFile input.txtとするとException in thread "main" java.lang.NoClassDefFoundError: ShowFile というエラーが出ます。input.txtというファイルは存在します。 アドバイスをお願いします。

    • ベストアンサー
    • Java
  • BufferedReaderで配列のデータを取り出したい

    PrintWriterで配列のデータを書き込み、 BufferedReaderで書き込んだデータを呼び出したい のですが、下記のソースで書き込むと [Ljava.lang.String;@1add2dd のように表示されてしまいます。 テキストファイルに 1,Server1 のような感じで 書き込んで読み込むにはどのようにしたら いいでしょうか? すみません、ご教授下さい。 よろしくお願いします。 import java.io.*; public class IOTest { public static void main(String[] args) { try{ PrintWriter pr = new PrintWriter( new BufferedWriter(new FileWriter("test.txt")),true); String index = "1"; String serverName = "Server1"; String Server [] = {index, serverName}; pr.println(Server); System.out.println("登録したデータは:" + Server + "です。\n"); BufferedReader br = new BufferedReader( new FileReader("test.txt")); String line; while((line = br.readLine()) != null){ System.out.println("取り出したデータは:" + line + "です。"); } }catch(Exception e){ e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • Javaのカウント方法について

    お伺い致します。 CSVで取り込んだデータの抽出をしたいのですが、方法が見出せません。どの点を直せば宜しいのでしょうか。 具体的には取り込んだ郵便番号をカウントして(例:京都市,34)CSVファイルに出力するように出したいのですがカウントがうまくできません。(以下、コメントアウトしたものがありますが、今までのソースを記載します) 宜しく御願いします。 import java.io.FileReader; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.*; public class test01 { static String fname ="26KYOUTO.CSV"; public static void main(String[] args){ if(args.length>0) fname = args[0]; try { BufferedReader reader = new BufferedReader(new FileReader(fname)); BufferedWriter pw = new BufferedWriter(new PrintWriter("orig.txt")); String line = reader.readLine(); System.out.println(line); pw.println(""); int n = 0; int count = 0; _/* while(true) { String line = reader.readLine(); if(line.equals("26101")) break; count++; } */ reader.close(); System.out.println("京都府北区=" +count ); } catch(FileNotFoundException e) { System.out.println("ファイルがありません。"); } catch(IOException e) { System.out.println("入出力エラーです。"); } } }

    • ベストアンサー
    • Java
  • ファイル出力時の

    以下のソースでファイル出力するのですが、 BufferedReader br = new BufferedReader(new FileReader(new File(args[0]))); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(args[1]))); //一行読み込みを行った文字列を格納 String line; //一行読み込み while((line = br.readLine()) != null){ //一行書き込み pw.write(line); System.out.println(line); } コンソールへの出力は正常に出力されるのですが、 ファイルへの出力は改行されずに一行で出力されてしまいます。 どうすればファイル出力も正常になるか教えてください。

  • Java言語のプログラムをC言語にする場合

    次の2つのJava言語のプログラムをC言語にしたいのですが、C言語でプログラムを書いたことがありません。C言語にする場合はどう書けばいいのでしょうか? import java.io.*; public class Sort { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("整数値を入力してください"); String line = reader.readLine(); int a = Integer.parseInt(line); String line2 = reader.readLine(); int b = Integer.parseInt(line2); String line3 = reader.readLine(); int c = Integer.parseInt(line3); String line4 = reader.readLine(); int d = Integer.parseInt(line4); int[] data = {a, b, c, d}; for (int i = 0; i< data.length - 1 ; i++) { for (int j = i + 1; j< data.length; j++) { if(data[i] > data[j]) { int e = data[i]; data[i] = data[j]; data[j] = e; } } } System.out.println("昇順に並べ替えると、"); for (int i = 0; i< data.length; i++) { System.out.print(data[i] + " "); } System.out.println("です。"); } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } } import java.io.*; public class Yakusu { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("2つの整数値を入力してください"); System.out.print("整数A : "); String line = reader.readLine(); int a = Integer.parseInt(line); System.out.print("整数B : "); String line2 = reader.readLine(); int b = Integer.parseInt(line2); if(a%b == 0){ System.out.println("BはAの約数です"); } else { System.out.println("BはAの約数ではありません"); } } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } }

  • ifを使った判断プログラムです(おそらく簡単)

    以下のプログラムをコンパイルしたいのですが、8行目のシンボル:変数readerが見つからないと表示されます。 いくら見直しても改善方法がわからないので、質問しました。 おそらく簡単な問題であると思うのですがわからなくて・・・ それともreader.readLine();がコマンドプロントンでは反応できないものなのでしょうか。 教えてください。よろしくお願いします。 import java.io.*; public class Kasa1{ public static void main(String[] args){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in),1); try{ System.out.println("降水確率を入力してください。"); String line = reader.readLine(); int n = Integer.parseInt(line); System.out.println("降水確率は" + n + "%です。"); if(n >= 50){ System.out.println("傘を忘れずにね。"); } else { System.out.println("傘はいりません。"); } System.out.println("いってらっしゃい。"); } catch(IOException e){ System.out.println(e); } catch(NumberFormatException e){ System.out.println("数字の形式が正しくありません。"); } } }

    • ベストアンサー
    • Java
  • プログラムの組み合わせ方

    java初心者です。 2つのプログラムを組み合わせて1つのプログラムにしたいんですが、イマイチ分かりません。 このプログラムと、 import java.io.*; class Hello2 {  public static void main(String[] args) throws IOException {   System.out.println("名前を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   System.out.println(str + "さん、こんにちは!");  } } このプログラムを、 import java.io.*; class Sanbai{  public static void main(String[] args) throws IOException {   System.out.println("好きな数を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   int x;   x = Integer.parseInt(str);   System.out.println("あなたの入力した数:" + x);   System.out.println("その3倍の数:" + (x*3));  } } 組み合わせて1つのプログラムにするにはどうしたらいいですか?(>_<)

    • ベストアンサー
    • Java
  • javaプログラミングの質問です。

    http://questionbox.jp.msn.com/qa1030602.html?StatusCheck=ON に載っている、プログラムを以下のようにQuestionというクラスで実行してみたところ、 import java.io.*; class Question{ public static void main(String Args[]){ BufferedReader reader = null; String strArray[][] = new String[4][4]; String fileName = "foo.txt"; int i = 0; int j = 0; try{ reader = new BufferedReader ( new FileReader(fileName) ); String line; while ( (line = reader.readLine() ) != null ){ StringTokenizer st = new StringTokenizer ( line ); while ( st.hasMoreTokens() ){ strArray[i][j] = st.nextToken(); System.out.print ( strArray[i][j] + " " ); j ++; } j = 0; i ++; System.out.println (""); } } catch ( Exception e ){ System.out.println ( e.toString() ); } } } Exception in thread "main" java.lang.Error: コンパイル問題が未解決です。 StringTokenizer を型に解決できません。 StringTokenizer を型に解決できません。 というエラーが出ます。 このサイトの質問者はうまくいっているようなのですが、私のコンパイラがうまく動いていないのでしょうか? java version "1.6.0_07" を使っていて、Eclipseを用いてコンパイルをしたりしています。 どなたかご指摘をどうぞよろしくお願いいたします。

    • ベストアンサー
    • Java