• 締切済み

テキストファイルを読み込んで別のファイルに出力するプログラム

テキストファイルを読み込んで分類し、別のファイルに出力するプログラムを作ろうと思っています。 大まかに作ってみたのですが、そもそもこれであっているのか確認してください。 import java.io.*; public class Test { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader ( new FileReader("kazu.txt")); int note, b1 = 0, b2 = 0, b3 = 0, b4 = 0; String input; while((input = br.readLine()) != null) { note = input.toint(); { //読み込んだString型のデータinputをint型に変換してnoteに代入 /*条件分岐 :noteの値が80以上ならb1に1を加える  条件分岐 :上記以外でnoteの値が70以上ならb2に1を加える  条件分岐 :上記以外でnoteの値が60以上ならb3に1を加える  条件分岐 :上記以外ならb4に1を加える*/ } //bwに文字リテラル"80以上"を書き込む //bwにTAB記号を1文字書き込む //bwにint型の変数b1の値の文字列表現を書き込む //bwに改行記号を書き込む //同様に"70以上80未満" "60以上70未満" "60未満"についてbwに必要な書き込みを行う bw.flush(); br.close(); bw.close(); } } 最近プログラミングを学び始め、急にいろんなことをやり出してしまったので何がなんだかわからなくなっています。 途中にある、String型のデータinputをint型に変換してnoteに代入というのは、どのようにすればいいのでしょうか? またその後にある条件分岐では、if note >=80 b1=b1+1; else if note>=70 ...とやっていけばいいのでしょうか? また、bwへの書き込みというのが(別のプログラムでも)うまくできません。 長々と書いてしまいましたが、よろしくお願いします。

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

みんなの回答

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

●String型のデータをint型に変換 int n = Integer.parseInt("123"); ●複数の分岐  if( 条件1 ){   処理1  }else if( 条件2 ){   処理2  }else if( 条件3 ){   処理3  }else if( 条件4 ){   処理4  }else{   全てに該当しない場合の処理  } ●テキストファイルの出力 FileOutputStream fos = new FileOutputStream("FILE_NAME.txt"); PrintWriter pw = new PrintWriter(fos); for(int i = 0 ; i < 10 ; i++){  pw.println((i+1) + "行目"); } pw.close();

angelicus
質問者

お礼

ありがとうございました。 色々やってみます。

関連するQ&A

  • プログラムの添削をお願いします。

    一箇所わからないところがあるのと、エラーになってしまうので間違っている箇所とその訂正方法を教えてください。 import java.io.*; public class Suuji { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader ( new FileReader("kazu.txt")); int note, b1 = 0, b2 = 0, b3 = 0, b4 = 0; String input; while((input = br.readLine()) != null) { int note; note = Integer.parseInt('input')//読み込んだString型のデータinputをint型に変換してnoteに代入 if (note >= 80) {b1 = b1+1};//noteの値が80以上のときb1に1加える。以下70,60とそれ以外に対し同様 else if (note >= 70) {b2 = b2+1}; else if (note >= 60) {b3 = b3+1}; else {b4 = b4+1}; } bw.write("80以上");//bwに文字リテラル"80以上"を書き込む bw.write('\t');//bwにTAB記号を1文字書き込む bw.write();//bwにint型の変数b1の値の文字列表現を書き込む bw.write('\n');//bwに改行記号を書き込む。同様に"70以上80未満" "60以上70未満" "60未満"についてbwに必要な書き込みを行う bw.write("70以上");// bw.write('\t');// bw.write();// bw.write('\n');// bw.write("60以上");// bw.write('\t');// bw.write();// bw.write('\n');// bw.write("60未満");// bw.write('\t');// bw.write();// bw.write('\n');// bw.flush(); br.close(); bw.close(); } } わからないのはbwにint型の変数b1の値の文字列表現を書き込むというところです。int型変数を文字列表現にするのができません。

    • ベストアンサー
    • Java
  • JAVAのプログラムについて・・・

    次のプログラムで分からないところがあります。 教えてください。 プログラムの説明 ・キーボードからの任意の個数の数値を入力し、入力した数値の個数と最大値を画面に表示する。 ・負の値を入力したらプログラムを終了する。いきなり負の値を入力することはないものとする。 入出力例 ()内の数値は、入力データである。この例の場合、入力は8個であるが、最後のデータは処理の終了を指示するものであるから、データの個数には含まない。 input1:(18) input2:(10) input3:(7) input4:(16) input5:(9) input6:(20) input7:(13) input8:-1 number=7 max=20 プログラムを一応考えてみました。 import java.io.*; class RepEx2{ public static void main(String[]args) throws IOException{ int in , n , max = 0; BufferedReader br = new BufferedReader(new InputsteeamReader(System.in)); //入力の準備       for(n = 1;true; n++){ //永久ループ          System.out.print("input"+n+":"); String s = br.readLine(); //キーボードからの文字列を入力          in =(1) (s); //文字列を数値に変換          if(in < 0) (2); //入力数値が負の時はルループ脱出          if((3)>(4))(5); //最大値の更新    } n--; (6)       System.out.printin("nember = " + n + " max = " + max); } } これでいいのでしょうか? (1)~5までは何を入れたらいいですか? また、(6)のn--;の命令はなぜ必要になるのでしょうか?

  • 値出力の条件

    Java勉強中の初心者です。 入力した値を出力するときに 必ず、"-"(ハイフン)を入力しなければ ならないのですが、 条件に、"-"(ハイフン)がない場合か 複数入力された場合、は"もう一度お願いします。" と出力をしたいのですが、if文の 条件の記述がわかりません。 なにかいいメソッドがあるのでしょうか? よろしければご教授お願いいたします。 (ハイフンが1つ入力されたらそのまま 出力します。) import java.io.*; public class Test1 { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String s = br.readLine(); //ここに条件 } }

  • プログラムの組み合わせ方

    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
  • CSVファイルを二次元配列に格納するプログラム

    前回のソースコードを改変してみました String Str = ""; int Count = 0; try { File inFile = new File("./res/test.csv"); FileReader fr = new FileReader(inFile); BufferedReader br = new BufferedReader(fr); while (br.ready()) { Str = br.readLine(); String[] temp = Str.split(","); int[] m = new int[temp.length]; for (int i = 0; i < temp.length; i++) { m[i] = Integer.parseInt(temp[i]); System.out.print(m[i] + ","); } System.out.println(); Count++; } br.close(); fr.close(); } catch (Exception e) { System.out.println("ファイル読み込みに関するエラー"); } 今一次元配列になっているのですが、これを二次元配列に代入したいのです Countで何回ループしたかによって二次元配列の縦の要素数としたかったのですが、 そうすると横の要素数になるループ中の一次元配列が使えないので困っています

  • CSVファイルを二次元配列に格納するプログラム

    整数のCSVファイルを読み込んで、int型の二次元配列に格納するプログラムを作成中なのですが どうもうまくいきません。 String Str = ""; try { File inFile = new File("./res/test.csv"); FileReader fr = new FileReader(inFile); BufferedReader br = new BufferedReader(fr); ArrayList<String[]> al = new ArrayList<String[]>(); while (br.ready()) { Str = br.readLine(); al.add(Str.split(",")); } int[][] im = new int[al.size()][]; for (int i = 0; i < al.size(); i++) { im[i] = (int)al.get(i); // ここでエラー } br.close(); fr.close(); } catch (Exception e) { System.out.println("ファイル読み込みに関するエラー"); } 他にいい方法ありませんか? また逆で、int型配列に格納されているデータをCSVファイルとして出力する方法もお願いします

  • マルチスレッドプログラムからのファイル出力

    VM:java1.4.2 OS:WindowsXp マルチスレッドのプログラムで、一つのファイルにテキストの出力を行うところで、うまくいかないところがあります。 <ソースファイル> import java.io.*; import java.util.*; import java.text.*; public class ThreadIppai { public static void main(String[] args) { for (int i = 0; i < 100; i++) { Thread thread = new ThreadHontai(); thread.start(); } } } class ThreadHontai extends Thread { public void run() { try { for (int i = 0; i < 500; i++) { BufferedWriter bw = new BufferedWriter(new FileWriter( "D:\\out.log", true)); String msg = (String) Values.ht.get(String.valueOf((int) (Math.random() * 10)).substring(0, 1)) + "\n"; bw.write(msg, 0, msg.length()); bw.flush(); bw.close(); } } catch (Exception e) { e.printStackTrace(); } } } class Values { public static Hashtable ht = new Hashtable(); static { // ht.put("0", "0000000000"); // ht.put("1", "1111111111"); // ht.put("2", "2222222222"); // ht.put("3", "3333333333"); // ht.put("4", "4444444444"); // ht.put("5", "5555555555"); // ht.put("6", "6666666666"); // ht.put("7", "7777777777"); // ht.put("8", "8888888888"); // ht.put("9", "9999999999"); ht.put("0", "0"); ht.put("1", "11"); ht.put("2", "222"); ht.put("3", "3333"); ht.put("4", "44444"); ht.put("5", "555555"); ht.put("6", "6666666"); ht.put("7", "77777777"); ht.put("8", "888888888"); ht.put("9", "9999999999"); } } <問題点> ファイルに出力された結果をみると、テキストの一部が欠けていたり、改行がされない行があったりします。 おそらく、同期処理を加えてないからだとは思うのですが・・・。(質問に続く) <質問1> テキストの一部が欠けたり、改行されない行が発生する原因はなぜでしょうか? たとえば、「0」と「11」を出力するとき、同時に複数のスレッドが書き込んだ場合、「101」となるのは、なんとなく分かります。 しかし、これが「01」のように、出力されるべき文字が出力されないという現象が発生してます。 <質問2> htにputする値の文字列長が、すべて異なっていますが、これをコメントアウトされている行のように、すべて同じ文字列長に した場合、上記の問題は発生しなくなります。 この原因はなんでしょうか? <質問3> この問題を、ThreadHontaiクラスのfor文の中だけの変更で解決することは可能でしょうか?(極力手を加えずに) synchronizedブロックの追加でいけるのかと思いましたが、試行錯誤の結果うまくいきませんでした。 以上、よろしくお願いします。

  • いつまでも偶数の入力を求めるプログラム

    こんにちは。プログラマーの見習いで、現在勉強中です(学生ではなく社会人です)。解答のないテキストで、いつまでも偶数の入力を求めるプログラムを作っているのですが、うまくいきません。どこが悪いか教えて頂けないでしょうか?よろしくお願いします。 //文字列を入力するためのパッケージをimport import java.io.*; class opt53{ public static void main(String[] args) throws IOException{ //文字列を入力するための準備 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); do { System.out.println("偶数を入力してください"); //入力された文字列を変数guuに格納 String guu = br.readLine(); //入力された文字列をint型に変換 int num = Integer.parseInt(guu); } while (num%2!=0); System.out.println("正しく偶数が入力されました。"); } }

    • ベストアンサー
    • Java
  • JavaのTCPソケット通信プログラムについて

    初めてJavaでTCPソケット通信を書いてみたのですが、質問です。ソケット通信をサーバーとクライアント側で確立した後、メッセージの送受信をやるとても簡素なプログラムを作成しました。一回目の送受信をするだけだと上手くいくのですが、同じコネクション内で二回目の送受信をするよう追記したところ動作がおかしくなりました。(一つ目のメッセージも受信しないまま画面が停止した状態になる)何が問題なのでしょうか。 (Receiver.java) public class Receiver { public static final int PORT = 30000; public static void main(String[] args) { try { ServerSocket serverSoc = new ServerSocket(PORT); Socket socket = null; System.out.println("Waiting for Connection.."); socket = serverSoc.accept(); System.out.println("Connection from "+socket.getInetAddress()); // receive message BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println("Message from sender ="+new String(br.readLine())); //send message←ここを追記するとおかしくなりました。 String message = "Hey This is receiver"; BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); System.out.println("I will send: "+message); bw.write(message); br.close(); bw.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } (Sender.java) public class Sender { public static final int PORT = 30000; public static void main(String[] args) { try { InetAddress LocalHost = InetAddress.getLocalHost(); InetSocketAddress socketAddress = new InetSocketAddress(LocalHost, PORT); Socket socket = new Socket(); socket.connect(socketAddress, 10000); //send message String message = "Hey This is sender"; BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); System.out.println("I will send: "+message); bw.write(message); // receive message←同じくここを追記するとおかしくなりました。 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println("Message from receiver ="+new String(br.readLine())); br.close(); bw.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }

  • ユーザー入力値を足し算する

    import java.io.*; public class sampleD4L2 { public static void main(String[] args) { //入力データー読み込みようオブジェクトを作成 BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in), 1); try{ //開始メッセージの表示 System.out.println("A+Bの足し算を行います"); //Aの値の入力を促す System.out.println("Aの値を入力してください"); //Stringクラス型の変数を宣言し読み込んだ入力データーを代入 String myString = myReader.readLine(); //String型に入力した値をint型の変数に代入 int intA = Integer.parseInt(myString); //Bの値の入力を促す System.out.println("Bの値を入力してください"); //Stringクラス型に読み込んだ入力データーの代入 int intB = Integer.parseInt(myString); //A+Bを計算し、intAnswerに代入 int intAnswer = intA + intB; //メッセージを合成して表示 System.out.println("A+Bを計算すると" + intAnswer + "になります"); //エラー処理ブロッグ }catch (IOException e) { System.out.println("エラーが発生しました"); } } } 上のソースは本通に写したんですが、Bの値が入力せずA+Aの計算になっています。どこがいけないのでしょうか?

専門家に質問してみよう