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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Java

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

1回答

2362閲覧

Javaでcsvデータを読み込み、書き出す際に改行する方法

luke_account

総合スコア3

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Java

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

1クリップ

投稿2021/07/04 15:19

JavaでCSVデータを読み込み、書き込む際に任意の場所で改行する方法

JavaでCSVデータを読み込み、書き込みを使用としているのですが、書き込みをする際に、任意の場所で改行をする方法がわかりません。
例えばイメージ説明このようなCSVデータを読み込んでイメージ説明このような配列に入れ替えようとしています。
しかし、その方法がわからず、色々な方法を試してもエラーが出てしまいます。

発生している問題・エラーメッセージ

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 at sample.main(sample.java:34)

該当のソースコード

Java

1 import java.io.*; 2 public class sample { 3 4 private final static String inputCsvFile = "samplecsv.txt"; 5 private final static String outputCsvFile = "newsamplecsv.txt"; 6 7 public static void main(String[] args){ 8 final int max_data = 100; 9 String[][] data = new String[max_data][]; 10 File inputFile = new File(inputCsvFile); 11 File outputFile = new File(outputCsvFile); 12 BufferedReader in = null; 13 BufferedWriter out = null; 14 try { 15 in = new BufferedReader(new FileReader(inputFile)); 16 out = new BufferedWriter(new FileWriter(outputFile)); 17 String line; 18 int index = 0; 19 20 while ((line = in.readLine()) != null){ 21 data[index] = line.split(","); 22 index++; 23 } 24 25 for(int i=0; i < data[0].length; i++){ 26 if (data[i] == null) break; 27 out.write(data[0][i] + ", "); 28 } 29 out.newLine(); 30 31 for(int i=1; i < data[0].length; i++){ 32 if (data[i] == null) break; 33 34 out.write(data[i][1] + ", " + data[i][2] + ", " + data[i][3] + ", " ); 35 out.write(" "); 36 if (data[i][3] != null) { 37 out.newLine(); 38 } 39 out.newLine(); 40 41 42 43 } 44 45 46 }catch(FileNotFoundException e){ 47 e.printStackTrace(); 48 }catch(IOException e){ 49 e.printStackTrace(); 50 }finally{ 51 try{ 52 in.close(); 53 out.close(); 54 }catch(IOException e){ 55 System.out.println("close fail"); 56 e.printStackTrace(); 57 } 58 } 59 } 60 }

試したこと

for文の中身を入れ替えてみたりしましたが、いくらやってもエラーが出てしまいます。

補足情報(FW/ツールのバージョンなど)

このようにJavaでCSVデータを読み込み、書き込む際に様々な編集を入れる方法が分かる方がいましたら、何卒よろしくお願いします。

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

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

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

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

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

Crimson_Tide

2021/07/04 16:10

まずはArrayIndexOutOfBoundsExceptionのエラーを直しませんか。 それからファイル出力だと結果の確認に手間なので、まずは画面出力してみてはどうでしょうか そしてどういう方針で出力したいのか文章にして書き出して整理する。 それを一度に実装しようとせず 少しずつ実装していってみてください。
Crimson_Tide

2021/07/04 16:34

「配列に入れ替えようとしています」とありますが、図のような縦の位置関係保つようなフォーマットは必要なくカンマ区切りのCSV出力したいということであっていますよね?
dodox86

2021/07/04 22:44

なぜ、1、2、3は改行せず、ひらがなの要素だけ改行するのか。それらの法則性を明示してください。
guest

回答1

0

ベストアンサー

Java

1import java.io.*; 2 3public class sample { 4 private final static String inputCsvFile = "samplecsv.txt"; 5 private final static String outputCsvFile = "newsamplecsv.txt"; 6 7 public static void main(String[] args) { 8 final int max_data = 100; 9 String[][] data = new String[max_data][]; 10 File inputFile = new File(inputCsvFile); 11 File outputFile = new File(outputCsvFile); 12 BufferedReader in = null; 13 BufferedWriter out = null; 14 try { 15 in = new BufferedReader(new FileReader(inputFile)); 16 out = new BufferedWriter(new FileWriter(outputFile)); 17 String line; 18 int index = 0; 19 20 while ((line = in.readLine()) != null) 21 data[index++] = line.split(","); 22 for (int i = 0; i < data[0].length; i++) 23 out.write(data[0][i] + ","); 24 out.newLine(); 25 26 for (int i = 1; i < index; i++) { 27 out.write(data[i][0] + "," + data[i][1] + "," + data[i][2] + ","); 28 out.newLine(); 29 for (int j = 3; j < data[i].length; j++) { 30 out.write(" " + data[i][j] + ","); 31 out.newLine(); 32 } 33 } 34 } catch (FileNotFoundException e) { 35 e.printStackTrace(); 36 } catch (IOException e) { 37 e.printStackTrace(); 38 } finally { 39 try { 40 in.close(); 41 out.close(); 42 } catch(IOException e) { 43 System.out.println("close fail"); 44 e.printStackTrace(); 45 } 46 } 47 } 48}

これでいいのでしょうか?
理解できたかどうかのコメントをお願いします。

投稿2021/07/06 15:57

kazuma-s

総合スコア8224

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

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

luke_account

2021/07/10 02:59

ご返答ありがとうございます。 今、試してみたところうまくいきました! ありがとうございます。 これからも、何卒よろしくお願いします。
dodox86

2021/07/10 03:03

コードの実行を試してうまくいったかどうかではなく、コードを理解しているかどうかを聞かれているのでは。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問