javaのfile書込みについて

このQ&Aのポイント
  • javaのfile書込みについての質問文章です。16コラム毎にデータの書込みを行いたい場合、どのように変更すればよいのかを教えてください。
  • また、書込みデータが長い場合にはブランク数を減らし、フォーマットを見やすくする方法も知りたいです。
  • 質問文章のコード部分では、指定したファイルにデータを書き込む処理が記述されています。
回答を見る
  • ベストアンサー

javaのfile書込みについて

毎度お世話になります。 Q1)下記のコードに於きまして、16コラム毎にデーターの書込みを行なう様に 変更できますか? 即ち、書込みデーターが長ければ、その分だけブランク数を減らしまして、フォーマット を見やすくする。 ============================ void file_out(){ try{ File file = new File("c:\\TRSX700\\test.txt"); if (checkBeforeWritefile(file)){ FileWriter fw = new FileWriter(file); for(int j=0; j<8; j++){ for(int i=0; i<11; i++){ fw.write(String.valueOf(cndMSRdata[j][i])); fw.write(" "); } fw.write("\r\n"); } fw.close(); } else{ System.out.println("ファイルに書き込めません"); } } catch(IOException e){ System.out.println("IOException: "+e); } //====================================== } 以上、宜しくお願いします。

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • heburusu
  • ベストアンサー率85% (140/164)
回答No.2

出力フォーマットのサンプルありがとうございます。 またまた認識が違っていたら恐縮ですが、 以下のように数値の表示を揃えたいということになりますでしょうか? #以下の"_"は空白に読み替えてください --------------------------------------------- 200.0 _1000.0 1.6 1.0 1.0 2.0 _90.0 _20.0 40.0 0.0 0.0 _20.0 20000.0 1.6 1.0 1.0 2.0 110.0 100.0 40.0 0.0 0.0 _30.0 20000.0 1.6 1.0 1.0 2.0 _90.0 _20.0 40.0 0.0 0.0 _40.0 20000.0 1.6 1.0 1.0 2.0 _90.0 _20.0 40.0 0.0 0.0 _40.0 20000.0 1.6 1.0 1.0 2.0 _90.0 _20.0 40.0 0.0 0.0 _50.0 20000.0 1.6 1.0 1.0 2.0 _90.0 _20.0 40.0 0.0 0.0 _60.0 20000.0 1.6 1.0 1.0 2.0 _90.0 _20.0 40.0 0.0 0.0 _70.0 20000.0 1.6 1.0 1.0 2.0 _90.0 _20.0 40.0 0.0 0.0 --------------------------------------------- >fw.write(String.valueOf(cndMSRdata[j][i])); に部分に >fw.write(String.format("%8.1f", String.valueOf(cndMSRdata[j][i]))); String.formatを追加すれば表示を揃えることができます。 #%8.1fは、整数部を8桁、少数部を1桁で表示するという指定です。

参考URL:
http://www.ipentec.com/document/document.aspx?page=java-string-format
bakabon_X
質問者

お礼

有難うございました。 初心者の初歩的な質問で御免なさい。 その他質問: String#formatと書かれてる箇所が、javaに関するサイトの中にありましたが、 この#は、.に置き換えて解釈すれば、良いのでしょうか?

その他の回答 (1)

  • heburusu
  • ベストアンサー率85% (140/164)
回答No.1

こんにちわ。 test.txtに1行に11個の値が出力されているところを、 1行に16個の値がでるようにしたいということでしょうか? ご質問が上記の理解であっているようでしたら、 >for(int i=0; i<11; i++){ を >for(int i=0; i<16; i++){ のようにすれば良いと思いますがいかがでしょうか? ・現在の出力フォーマット(1行に数値が11個) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .... ・変更したいフォーマット(1行に数値が16個) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .... ご質問の意図と違うようでしたら、 出力サンプルを提示頂ければより回答できると思います。

bakabon_X
質問者

補足

毎度、お世話になります。 出力サンプルは下記で、文字出力の後にブランクが続いて、合計のコラム数が10桁になるように することです。 ==================================== 200.0 1000.0 1.6 1.0 1.0 2.0 90.0 20.0 40.0 0.0 0.0 20.0 20000.0 1.6 1.0 1.0 2.0 110.0 100.0 40.0 0.0 0.0 30.0 20000.0 1.6 1.0 1.0 2.0 90.0 20.0 40.0 0.0 0.0 40.0 20000.0 1.6 1.0 1.0 2.0 90.0 20.0 40.0 0.0 0.0 40.0 20000.0 1.6 1.0 1.0 2.0 90.0 20.0 40.0 0.0 0.0 50.0 20000.0 1.6 1.0 1.0 2.0 90.0 20.0 40.0 0.0 0.0 60.0 20000.0 1.6 1.0 1.0 2.0 90.0 20.0 40.0 0.0 0.0 70.0 20000.0 1.6 1.0 1.0 2.0 90.0 20.0 40.0 0.0 0.0

関連するQ&A

  • Javaのプログラムについて教えてください!

    BufferedWriterを使ってコマンドプロンプトから文字を入力して実行時に与えたパスのテキストに書き込んでいくプログラムをコーディングしてみたのですがなかなか上手くいきません。添削をお願いします。 import java.io.*; class BW{ public static void main(String[] args){ try{ File fl = new File("args[0]"); FileWriter fw = new FileWriter(fl); BufferedWriter bw = new BufferedWriter(fw); for(int i = 0;args[i]==null;i++){ bw.write(args[i]); bw.newLine(); } bw.flush(); bw.close(); }catch(IOException e){ e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • テキストファイルの日付表示

    JAVA初心者なのですが、テキストファイルに出力する時にファイル名を現在日付にしたいのですが、どうすればよいでしょうか?(yyyymmdd.txtを20070316.txtというふうにしたい) 後、@SuppressWarnings("unchecked")と記述しているのにコンパイルで-Xlint:unchecked.警告が出てきてします!どなたかご教授ください!!ちなみにJAVA1.5 import java.io.File; import java.io.FileWriter; import java.io.BufferedWriter; import java.io.IOException; import java.util.ArrayList; public class Writedown { @SuppressWarnings("unchecked")/*コンパイラの警告を抑制する */ public static void fileWrite(ArrayList<ArrayList> WriteArrayList) { try { File txt = new File("yyyymmdd.txt"); /*出力するファイル*/ BufferedWriter bw = new BufferedWriter(new FileWriter(txt));/* try { for(int i = 0; i < WriteArrayList.size(); i++){ ArrayList list = WriteArrayList.get(i); if(i == 0){ bw.write((list.size() - 3) + "科目成績表\r\n"); } for(int j = 0; j < list.size(); j++){ if(j > 0){ bw.write("\t"); } if(list.get(j).toString().equals("名前")){ list.remove(j); list.add(j,"名前"); } bw.write(list.get(j).toString()); System.out.print(list.get(j) + "\t"); } bw.write("\r\n"); bw.flush(); System.out.println(""); } } catch (IOException e) { System.out.println("ファイル書き込みエラー"); } bw.close(); } catch (IOException e) { System.out.println("ファイルオープンエラー"); } } }

  • javaのプログラムの質問です。

    10件まで登録できる簡易メモリストを作成して下さい 実行例: > java MemoList > コマンドを入力して下さい:list 1:俺達がガンダムだ! 2:ザクとは違うのだよザクとは! 3:当たらなければどうという事はない! コマンド list メモリストを1~の番号と共に表示 add メモを追加 del メモ番号を入力して削除 upd メモ番号を入力して上書き save ファイルに保存 h コマンド一覧を表示 q 終了 注意点 ・プログラム起動時にファイルからメモリストを読み込んで下さい ・保存するファイルは任意の固定ファイルで構いません ・メモは1~の連番で10件まで登録可能として下さい ・終了のコマンドが入力されるまで何度でもコマンド入力可能として下さい ・JavaDoc/プログラムコメントはしっかり記述して下さい ・エラー発生時は適切なメッセージを標準出力に出力して下さい という問題なのですが、以下のソースでとりあえずは動くのですが。 import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.ArrayList; class MemoList{ /** * メインメソッド **/ public static void main(String[] args) throws IOException { // Fileクラスのインスタンス化 File file1 = new File("C:\\WORK\\Memo.txt"); // FileReaderクラスのインスタンス化 FileReader filereader = new FileReader(file1); // FileWriterクラスのインスタンス化 FileWriter filewriter = new FileWriter(file1); // BufferedReader&InputStreamReaderクラスのインスタンス化 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ArrayList <String> arraylist = new ArrayList<String>(); int num = 1; // while文ループを行う while(true){ System.out.println("> コマンドを入力して下さい:"); String str1 = br.readLine(); if("list".equals(str1)){    for(int i=0; i < arraylist.size(); i++){      System.out.println(i + 1 + ":" + arraylist.get(i));    } } else if("add".equals(str1)){ System.out.println("> メモを入力して下さい。"); if(arraylist.size() == 10){    System.out.println("> 10件登録されています。追加する場合は削除して下さい。");    delete(br,arraylist); }else{ String str2 = br.readLine(); arraylist.add(str2); } }else if("del".equals(str1)){ delete(br,arraylist); }else if("upd".equals(str1)){ System.out.println("> 上書きするメモ番号を入力して下さい。"); try{   String str4 = br.readLine();   int num2 = Integer.parseInt(str4);   System.out.println("> 上書きする内容を入力して下さい。");    String str5 = br.readLine();   arraylist.set(num2 - 1,str5); }catch(NumberFormatException e){ System.out.println("正しい番号を入力して下さい"); }catch(IndexOutOfBoundsException e){ System.out.println("正しい番号が入力されていないので上書き出来ません"); } (1)}else if("save".equals(str1)){ try{ for(int j=0; j < arraylist.size(); j++){ filewriter.write(arraylist.get(j) + "\r\n"); } System.out.println(">ファイルに保存しました。"); filewriter.close(); }catch(IOException e){ (2) System.out.println("ファイルに保存出来ません"); (3) } }else if("h".equals(str1)){ System.out.println("list:メモリストを1~の番号と共に表示"); System.out.println("add:メモを追加"); System.out.println("del:メモ番号を入力して削除"); System.out.println("upd:メモ番号を入力して上書き"); System.out.println("save:ファイルに保存"); }else if("q".equals(str1)){    System.out.println("> Terminated");    break; } } } // deleteメソッド public static void delete(BufferedReader br,ArrayList<String> arraylist) throws IOException { try{   System.out.println("削除するメモ番号を入力して下さい");   String str3 = br.readLine();   int num3 = Integer.parseInt(str3);   arraylist.remove(num3 - 1); }catch(IndexOutOfBoundsException e){     System.out.println("正しい番号を入力して下さい"); }catch(NumberFormatException e){    System.out.println("正しい番号以外は受け付けません"); } } } 読みにくいのはご容赦ください。 (1)と(3)の間の処理なのですが、現在のソースで実行した場合、適当に「add」でメモを書き、最初に「save」コマンドを入力するとちゃんとWORKフォルダ内に作成した「Memo.txt」に保存されます。しかし、2回目以降、コマンドを入力して処理を行い、saveコマンド入力すると、例外処理となり(2)が表示され、以降はどのコマンド処理をしても(2)が表示され続けるという具合になってしまいます。どなたか教えていただけないでしょうか?よろしくお願い致します。 通報する

    • ベストアンサー
    • Java
  • Fileの読み取り専用の解除

    いつもお世話になっています。 ちょっと気になったので、質問させて頂きました。 現在、Fileを使用して、読み取り専用の設定を行っているのですが、 その際、一度「読み取り専用」にしてしまったら、 解除は不可能なのでしょうか? 作成したクラスが、 String fileName = "dataList.txt"; File file = new File(fileName); String str = "あいうえお"; String sep = System.getProperty("line.separator"); //読み取り設定 file.setReadOnly(); try{ FileWriter fw = new FileWriter(file); fw.write(str); fw.write(sep); fw.write(str); fw.flush(); fw.close(); }catch(FileNotFoundException e) { }catch(IOException i){} //ここで読み取り専用を解除したい if(file.canRead() ) { System.out.println("可能です"); } if(file.canWrite()){ System.out.println("書き込み可"); }else { System.out.println("不可"); } 気になって元のFileクラスのソースをみてみたのですが、 /**readOnlyメソッドのみ、抜粋 **/ public boolean setReadOnly() { //Securityの設定 SecurityManager security = System.getSecurityManager(); //securityの確認  if (security != null) { //この時のpathは fileNameとおなじこと security.checkWrite(path); } //ここを設定してなかったら、読み取り専用にはならない気が.. return fs.setReadOnly(this); } で、どうしてもわからないのが、FileSystemクラスのnativeメソッドを呼んでいることなのですが、このnativeメソッドがどうやって機能しているのかがわかりません。 宜しくお願いします。

  • JAVAの質問です。

    JAVAの質問です。 javaでスロットを作りたいのですが…。 3行3列で縦と横同じ数字の場合”おめでとう”と表示されるプログラムを作りたいのですがわからないです。 助けてください(>_<) public class surotto { public static void main(String args[]) { int hako[][]; int i,j; hako = new int[3][3]; System.out.println("スロットスタート。"); for(i=; i<3; i++){ for(j=0; j<3; j++){ hako[i][j] = (int)(Math.random()*10); } } for(i=0; i<3; i++){ for(j=0;j<3;j++){ System.out.println([i][j]); } System.out.println("\r\n"); } for(i=0; i<3 ; i++){ if((hako[i][0] == hako[i][1]) && (hako[i][1] == hako[i][2])){ System.out.println("横がそろいました、おめでとう\n"); } } for(j=0; j<3 ; j++){ if((hako[0][j] == hako[1][j]) && (hako[1][j] == hako[2][j])){ System.out.println("縦がそろいました、おめでとう\n"); } }

    • ベストアンサー
    • Java
  • Java ApachePOIについて

    サーブレットとApachePOIについて質問です。 下記のソースで書き込んだセルをすべて黄色で塗りつぶしをしたいのですが、 ソースの書き方を教えてください。 以上、お願いします。 「ソース」 // 業務名前 String[] name4 = request.getParameterValues("gyoumuname"); for (int i = 0; i < name4.length; i++) { System.out.println(i + " " + name4[i]); name4[i] = new String(name4[i].getBytes("8859_1"), "UTF-8"); List outList=new ArrayList(); for (int i = 0; i < name4.length; i++) { outList.add(name4[i]); } for (int i = 0; i < outList.size(); i++) { Row row5 = sheet.getRow(8 + i); row5.getCell(3).setCellValue(new HSSFRichTextString(outList.get(i).toString())); } // 値を書き込んだエクセルを出力する FileOutputStream out = null; try { out = new FileOutputStream( "C:\\Users\\satou\\Desktop\\weekreport.xls"); workbook.write(out); } catch (IOException e) { System.out.println(e.toString()); } finally { try { out.close(); } catch (IOException e) { System.out.println(e.toString()); } } 以下省略。

  • 実行速度を速くする方法

    javaで整数がランダムに記述されたテキストファイルを読み込み、ソートし、テキストファイルに出力させるプログラムを考えています。 テキストファイルからの読み込みはあらかじめ配列を作っておき、scannerで読み込んでいます。 アルゴリズム(バブルソート)を変更せずに実行速度を速くするにはテキストファイルの読み込みを速くしたいのですが、どのように変更すれば良いでしょうか。 ソート数としては10万くらいを考えています。 またプログラムの記述が変なところがあれば教えていただければありがたいです。 import java.io.*; import java.util.Scanner; class test1_4{ public static void main(String args[]){ long start = System.currentTimeMillis(); try{ File filein = new File("./input.txt"); BufferedReader br = new BufferedReader(new FileReader(filein)); int x[] = new int[100000]; br = new BufferedReader(new FileReader(filein)); Scanner scan = new Scanner(new File("./input.txt")); int k=0; while(scan.hasNext()){ x[k] = scan.nextInt(); k++; } br.close(); for(int i=0; i<k; i++){ for(int j=k; j>0; j--){ int z = j-1; if(x[z] > x[j]){ int tmp = x[j]; x[j] = x[z]; x[z] = tmp; } } } try{ File fileout = new File("./output.txt"); BufferedWriter bw = new BufferedWriter(new FileWriter(fileout)); PrintWriter pw = new PrintWriter(bw); for(int i=1; i<k+1; i++){ if(x[i]>0){ pw.print(x[i]); pw.print(" "); if (i%10 == 0) { pw.print("\r\n"); } } } pw.close(); bw.close(); } catch(IOException e){ System.out.println(e); } long stop = System.currentTimeMillis(); System.out.println("実行にかかった" + (stop - start) + " ミリ秒です"); } catch(FileNotFoundException e){ System.out.println(e); } catch(IOException e){ System.out.println(e); } } }

  • Javaが途中で止まってしまいます

    Javaで音声ファイルを変換するスクリプトなのですが、音声ファイル自体は認識して「ファイルコピー終了」と出るのですが、実際にはコピーされておらず、そこで終わってしまい変換工程まで辿り着かない状態です。 ============================== import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class OnseiFileConvert { /** * @param args */ public static void main(String[] args) { OnseiFileConvert exe = new OnseiFileConvert(); exe.execute(); } /** m = 0x80; for( i=0; i<fsize; i++, m++ ) { if( m == 0xFF ) { m = 0x80; } fread( &t, 1, 1, fp ); t = t^m; fwrite( &t, 1, 1, fp_out ); } */ public void execute(){ String voice_dir_in = "C:\\java\\onsei"; String voice_dir_out = "C:\\output\\onsei"; try { convVoice(voice_dir_in,voice_dir_out); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 音声変換処理 * @throws IOException * @throws InterruptedException */ private void convVoice(String voice_dir_in,String voice_dir_out) throws IOException, InterruptedException{ System.out.println("ディレクトリーコピー開始"); System.out.println("xcopy /T /E \"" + voice_dir_in + "\" \"" + voice_dir_out +"\""); Process proc = Runtime.getRuntime().exec( "xcopy /T \"" + voice_dir_in + "\" \"" + voice_dir_out +"\""); proc.waitFor(); proc.destroy(); System.out.println("ディレクトリーコピー終了"); System.out.println("ファイルコピー開始"); convData(voice_dir_in, voice_dir_out); System.out.println("ファイルコピー終了"); } /** * @param voice_dir_in * @param voice_dir_out * @throws IOException * @throws InterruptedException */ private void convData(String voice_dir_in, String voice_dir_out) throws IOException, InterruptedException { System.out.println(voice_dir_in + "/" + voice_dir_out); File in_file = new File(voice_dir_in); File[] in_files_list = in_file.listFiles(); for(int i = 0; i < in_files_list.length ; i++ ){ File chFile = in_files_list[i]; if(chFile.isDirectory()){ convData(voice_dir_in + "\\" + chFile.getName() ,voice_dir_out + "\\" + chFile.getName() ); } else { String file_name = chFile.getName(); System.out.println(file_name); if(".".equals(file_name.substring(0, 1))){ file_name = file_name.substring(1, file_name.length()-4); File ofile = new File(voice_dir_out + "\\" + file_name); if( ofile.length() == 0 ){ convFile(voice_dir_in + "\\" + chFile.getName(),voice_dir_out + "\\" + file_name); } } } } } /** * ファイル単位に変換を実施する処理 */ private void convFile(String input_file_name,String out_file_name) { //convert FileInputStream fip = null; FileOutputStream fop = null; try { System.out.println("変換開始"); fip = new FileInputStream(input_file_name); fop = new FileOutputStream(out_file_name); long fsize = (new File(input_file_name)).length(); int m = 0x80; for( int i=0; i< fsize; i++, m++ ) { if( m == 0xFF ) { m = 0x80; } int t = fip.read(); t = t^m; fop.write(t); } System.out.println("変換完了" + fsize + "Byte"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if(fip != null){ fip.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(fop != null){ fop.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } ============================== 長時間悩んで書き直したりしたのですが、やはり結果が変わらずお手上げ状態です。 どうぞご助力お願いします。

    • ベストアンサー
    • Java
  • Java・ファイルへの書き込み

    はじめまして。 下記のプログラムで、以下の3つがどのような関係なのかがわかりません。 ("test1.txt")とnew FileWriterの関係 (new FileWriter("test1.txt")とnew BufferedWriterの関係 (new BufferedWriter(new FileWriter("test1.txt")と new PrintWriterの関係 どうかご教示いただきたく、よろしくお願い致します。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class Sample7 { public static void main(String[] args){ PrintWriter pw = null; try{ pw = new PrintWriter (new BufferedWriter(new FileWriter("test1.txt"))); pw.println("Hello!"); pw.println("GoodBye"); System.out.println("ファイルに書き込みました。"); }catch(IOException e){ System.out.println("入出力エラーです。"); }finally{ if(pw != null){ pw.close(); } } } }

    • ベストアンサー
    • Java
  • 簡単なマインスイーパーをJavaで作りたいです。

    Javaの勉強をしたいと思い下のソースのマインスイーパーを ウィンドウ上で実行できるようにしたいです。 そのときに他のソースから呼び出す形にしたいです。 どのようにしたら良いでしょうか?教えてください。 出来ればソースがあるとありがたいです。 import java.util.Scanner; public class MineSweeper extends MinePrinter { public static void main(String[] args) { Scanner sc = new Scanner(System.in); MineSweeper game = new MineSweeper(); game.displayStrblock(); while (!game.dead) { System.out.println("\n:爆弾数・・・" + game.mines); System.out.println("\n:場所を選んでください"); System.out.println("縦の場所の数字を入力"); int tate = Integer.parseInt(sc.next()); System.out.println("横の場所の数字を入力"); int yoko = Integer.parseInt(sc.next()); game.mineClick(tate, yoko); game.displayStrblock(); } } } class MinePrinter { String[][] strblock = new String[5][5]; int[][] blocks = new int[5][5]; int mines = 0; boolean dead = false; public MinePrinter() { mineSet(); } void mineClick(int i, int j) { if (aroundManyMines(i, j) == 99) { System.out.println("burst!!!"); System.out.println("You Dead!!\n"); strblock[i][j] = "*"; dead = true; } else { strblock[i][j] = Integer.toString(aroundManyMines(i, j)); } } void mineSet() { for (int i = 0; i < blocks.length; i++) { for (int j = 0; j < blocks[i].length; j++) { if (Math.random() < 0.2) { blocks[i][j] = 99; mines += 1; } else { blocks[i][j] = 0; } } } for (int i = 0; i < strblock.length; i++) { for (int j = 0; j < strblock.length; j++) { strblock[i][j] = "#"; } } } void displayStrblock() { for (int i = 0; i < strblock.length; i++) { for (int j = 0; j < strblock.length; j++) { System.out.print(strblock[i][j] + " "); } System.out.println(":" + i); } } int aroundManyMines(int i, int j) { if (blocks[i][j] == 99) { return 99; } int ans = 0; for (int r = -1; r <= 1; r++) for (int c = -1; c <= 1; c++) { try { if (blocks[i + r][j + c] == 99) { ans += 1; } } catch (ArrayIndexOutOfBoundsException e) { continue; } } return ans; } }

    • ベストアンサー
    • Java

専門家に質問してみよう