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

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

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

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

Q&A

解決済

1回答

1275閲覧

配列の2行目を切り出す

kabutohyper

総合スコア7

Java

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

0グッド

0クリップ

投稿2019/10/18 09:26

編集2019/10/18 09:30

以下のやり方がわからず困っています。
①配列の2行目を取り出す
②バイトの合計値を求める
③バイナリファイル読み書き
④CSVファイル変換

特に①と②で詰まっています。

具体的に申し上げますと、まず、指定のフォーマットファイルを読込み、1行目をヘッダー、2行目をカンマ区切りで取り出します。
次に、カンマ区切りで取り出した2行目を基に、バイト数の合計をlistで返します。
最後に、バイト数の合計値を基に、バイナリファイルを読み込み、読み込んバイナリファイルをCSVファイルに変換します。

尚、記載したソースコードは、
ReadFormatメソッドがフォーマット呼び出しメソッド、
totalByteメソッドがバイト合計値計算メソッド、
Binaryメソッドがバイナリファイル読み書きメソッド、
CreateCsvメソッドが、CSV変換メソッドになります。

①と②ができないため、totalByteから先のメソッドが完成できません。

お手数ですが、ご回答いただけると幸いです。
よろしくお願いします。

package

1 2import java.io.BufferedInputStream; 3import java.io.BufferedReader; 4import java.io.ByteArrayOutputStream; 5import java.io.File; 6import java.io.FileInputStream; 7import java.io.FileOutputStream; 8import java.io.IOException; 9import java.io.InputStreamReader; 10import java.util.List; 11 12public class Search2 { 13 14 final static String Rfile1 = "loc"; 15 final static String Rfile2 = "acc"; 16 final static String Rfile3 = "mag"; 17 18 19 20 public static void main(String[] args) throws IOException { 21 // TODO 自動生成されたメソッド・スタブ 22 23 String formatNumber = args[1]; 24 String conversionFile = args[2]; 25 26 27 if(conversionFile.equals("1")) { 28 29 conversionFile = Rfile1; 30 31 } else if(conversionFile.equals("2")) { 32 33 conversionFile = Rfile2; 34 35 } else if(conversionFile.equals("3")) { 36 37 conversionFile = Rfile3; 38 39 } else { 40 System.out.println("File is not found"); 41 } 42 43 File fileName = new File("Format" + "\" + formatNumber + "\" + conversionFile + ".fmt"); 44 45 //File filePath = new File("../../../Format" + "\" + formatNumber + "\" + conversionFile + ".fmt"); 46 47 //String filePath = fileName + "\" + formatNumber + "\" + conversionFile + ".fmt"; 48 49 50 String filePath = fileName.getCanonicalPath(); 51 //ファイル読み込み 52 ReadFormat(filePath, formatNumber, conversionFile); 53 54 String text1[] = new String[1]; 55 56 //totalByte list(1)を引数でわたし、合計バイト数を返す 57 //totalByte(); 58 //CSVファイル作成 59 //Binary(); 60 61 return; 62 } 63 64 65 66 67 /** 68 * 69 * @param formatNumber 70 * @return 71 * @throws IOException 72 */ 73 74 75 private static void ReadFormat(String filePath, String formatNumber, String conversionFile) { 76 77 78 79 try { 80 int i = 0; 81 String str = null; 82 String[] text1 = new String[2]; 83 84 85 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "Shift-JIS")); 86 87 while ((str = br.readLine()) != null) { 88 89 byte[] b = str.getBytes(); 90 str = new String(b, "UTF-8"); 91 text1[i] = str; 92 i++; 93 94 } 95 96 br.close(); 97 98 99 }catch (Exception e) { 100 System.out.println("変換に失敗しました"); 101 } 102 103 return; 104 } 105 106 /** 107 * 108 * @param createFileName 109 * @param list 110 * @return 111 */ 112 113 114 115 public static int totalByte() { 116 117 118 119 120 int sum = 0; 121 for (int a = 0; a < bytes.length; a++ ) { 122 sum += bytes[a]; 123 124 } 125 System.out.println(sum); 126 return sum; 127 128 } 129 130 131 public static String Binary(List<String[]> list1, String charset, String str, Integer len) { 132 133 134 try { 135 136 FileInputStream fis = new FileInputStream("C:\Users\nakamura\Desktop\pleiades\workspace\Sample5\1801\20180602235854_f8ba5380f328eb51.mag"); 137 BufferedInputStream bis = new BufferedInputStream(fis); 138 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 139 140 /*int cnt = 0; 141 String sb = ""; 142 143 for (int c = 0; c < str.length(); c++) { 144 String tmpStr = str.substring(c, c + 1); 145 byte[] b = tmpStr.getBytes(charset); 146 if(cnt + b.length > len) { 147 return sb.toString(); 148 } else { 149 //sb.append(tmpStr); 150 cnt += b.length; 151 } 152 }*/ 153 154 byte[] b = new byte[8]; 155 int readByte = 0; 156 while((readByte = bis.read(b)) != -1) { 157 baos.write(b, 0, readByte); 158 readByte = bis.read(b); 159 } 160 161 byte[] result = baos.toByteArray(); 162 FileOutputStream fos = new FileOutputStream("C:\Users\nakamura\Desktop\pleiades\workspace\Sample5\1801\20180602235854_f8ba5380f328eb51.mag"); 163 fos.write(result.length); 164 fos.close(); 165 bis.close(); 166 baos.close(); 167 168 } catch (IOException e) { 169 e.printStackTrace(); 170 } 171 172 173 return str; 174 } 175 176 177 /*public static boolean CreateCsv() { 178 try { 179 PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(), "UTF-8"))); 180 for (String[] tmpStringArray : list) { 181 pw.println(String.join(",", tmpStringArray)); 182 } 183 184 pw.close(); 185 } catch (Exception e) { 186 return false; 187 } 188 }*/ 189}

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

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

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

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

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

dodox86

2019/10/18 10:40 編集

> ①と②ができないため、totalByteから先のメソッドが完成できません。 ReadFormatメソッドとtotalByteメソッドをまず先に完成させたいということでしょうか。 あと、可能であればサンプルとなるフォーマットファイルを提示された方が良いと思います。
kabutohyper

2019/10/21 02:28

ReadFileメソッドは完成してるので、totalByteメソッド以降を完成させたいです。 また、フォーマットファイルなのですが、こちらの都合上、添付することができないです。 内容は、一行目が項目名(何々、何々、、、というように表示されています)、二行目が一行目に表示されている項目ごとのバイト数になっています。
guest

回答1

0

ベストアンサー

「2行目」って、まさか2要素目の事?

java

1 String formatNumber = args[1]; 2 String conversionFile = args[2];

Javaでの配列は0番始まりなので、コマンドライン引数が2つしかないならargs[2]は範囲外です。
こう書くとどうですか?

java

1 String formatNumber = args[0]; 2 String conversionFile = args[1];

投稿2019/10/21 02:14

swordone

総合スコア20651

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

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

kabutohyper

2019/10/21 02:52

説明不足で申し訳ありません。 二行目というのは、ReadFileメソッドで読み込んだフォーマットファイルの二行目のことです。 よろしくお願いします。
swordone

2019/10/21 02:57

ReadFileメソッドってどこにあるんですか?
kabutohyper

2019/10/21 03:01

すみません。ReadFormatメソッドでした。
swordone

2019/10/21 03:03

返り値がない(void)である限り、無理では?
kabutohyper

2019/10/21 06:47

戻り値を設定しました。booleanにしました。 メインメソッドでReadFormatメソッドで読み込んだフォーマットの2行目を取り出したいのですが、どうすればよいでしょうか。 よろしくお願いします。
swordone

2019/10/21 09:58

あなたが得たい情報は何ですか? それをメソッドに返してもらえばいいのではないですか?
ironya

2019/10/22 02:24

戻りの型を String にして、return text1[1]; しておいて、mainメソッドでは ReadFirmatメソッドの戻り値を変数に受け取って利用すれば良いのでは?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問