前提・実現したいこと
【変換前CSVファイル】 "1","コンビニ","100-0000","東京都","Aビル2階"
上記のようなCSVファイルをJavaで読み込み、テキストファイルに変換するプログラムを作っています。
それぞれ(10バイト,20バイト,8バイト,8バイト,20バイト)の固定長で変換したいと思っています。
データ例:
変換前:1(1バイト)
変換後:0000000001(10バイト)
変換前:Aビル2階(9バイト)
変換後:Aビル2階□□□□□␣(20バイト)
【変換後テキストファイル】 0000000001コンビニ□□□□□□100-0000東京都□Aビル2階□□□□□␣
発生している問題・エラーメッセージ
CSVファイルをテキストファイルに変換することはできましたが、どうすればそれぞれ異なる固定長に変換できるのかが分かりません。
該当のソースコード
JAVA
1public class Csv { 2 3 public static void main(String args[]) { 4 try ( //変換前CSVファイル読み込み 5 BufferedReader reader = new BufferedReader(new InputStreamReader( 6 new FileInputStream(args[0]), "Windows-31J")); 7 //変換後テキストファイル指定 8 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( 9 new FileOutputStream(args[1]), "Windows-31J"))) { 10 11 String line; 12 while (true) { 13 //入力ファイルから1行読み込む。 14 line = reader.readLine(); 15 if (line == null) { 16 break; 17 } 18 19 String[] values = line.substring(1, line.length() - 1).split("\",\""); 20 for (String elem : values) { 21 //行データを出力ファイルへ書き出す。 22 writer.write(elem); 23 writer.write("\r\n"); 24 } 25 26 } 27 28 } catch (Exception e) { 29 e.printStackTrace(); 30 System.out.println("異常終了しました。"); 31 System.exit(-1); 32 } 33 34 System.out.println("正常終了しました。"); 35 System.exit(0); 36 37 } 38 39}
【追記】現状のコード
JAVA
1package jp.aast.kyoiku; 2import java.io.BufferedReader; 3import java.io.BufferedWriter; 4import java.io.FileInputStream; 5import java.io.FileOutputStream; 6import java.io.InputStreamReader; 7import java.io.OutputStreamWriter; 8 9 10public class CsvToText { 11 12 public static void main(final String args[]) { 13 try ( 14 BufferedReader reader = new BufferedReader(new InputStreamReader( 15 new FileInputStream(args[0]), "Windows-31J")); 16 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( 17 new FileOutputStream(args[1]), "Windows-31J"))) { 18 19 while (reader.ready()) { 20 //入力ファイルから1行読み込む。 21 final String line = reader.readLine(); 22 final FileOutputStream os = new FileOutputStream(args[1]); 23 24 final String enc = "Windows-31J"; 25 26 final String[] items = line.replace("\"", "").split(","); 27 //行データを出力ファイルへ書き出す。 28 os.write(String.format("%010d", Integer.parseInt(items[0])).getBytes(enc)); 29 os.write(String.format("%-100s", items[1]).getBytes(enc), 0, 20); 30 os.write(String.format("%-100s", items[2]).getBytes(enc), 0, 8); 31 os.write(String.format("%-100s", items[3]).getBytes(enc), 0, 8); 32 os.write(String.format("%-100s", items[4]).getBytes(enc), 0, 20); 33 34 os.close(); 35 36 } 37 38 } catch (Exception e) { 39 e.printStackTrace(); 40 41 System.out.println("異常終了しました。"); 42 System.exit(-1); 43 } 44 45 System.out.println("正常終了しました。"); 46 System.exit(0); 47 48 } 49 50} 51 52 53
回答1件
あなたの回答
tips
プレビュー