Csvファイル「read_ex.csv」を配列に読み取ろうとしています。 web/stackoverflowで無限に検索して、ファイルを配列に読み込む方法を見つけました。私ができることはストリーミング形式で読むことですが、ファイルのサイズが可変であるため、配列に保存することはできません。 ArrayListは可変サイズの配列を処理するメソッドであると信じていますが、その操作方法はわかりません。基本的に、whileループが終了した後、文字列配列の「値」にアクセスできるようにしたいと考えています。
import Java.util.Scanner;
import Java.io.FileNotFoundException;
import Java.io.File;
public class sortarray {
public static void main (String []agrs){
String fileName= "read_ex.csv";
File file= new File(fileName);
try{
Scanner inputStream= new Scanner(file);
while(inputStream.hasNext()){
String data= inputStream.next();
String[] values = data.split(",");
System.out.println(values[1]);
}
inputStream.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
}
//This prints out the working directory
System.out.println("Present Project Directory : "+ System.getProperty("user.dir"));
}
}
@ Minjun.Yで言及されているようにApache CSVライブラリを使用することはまったく問題ありませんが、私はあなたのコードにより近く、たぶんあなたがたどりやすいソリューションを提供しようとしています:
_import Java.io.File;
import Java.io.FileNotFoundException;
import Java.util.ArrayList;
import Java.util.Arrays;
import Java.util.List;
import Java.util.Scanner;
public class CsvParser {
public static void main(String[] args) {
String fileName= "read_ex.csv";
File file= new File(fileName);
// this gives you a 2-dimensional array of strings
List<List<String>> lines = new ArrayList<>();
Scanner inputStream;
try{
inputStream = new Scanner(file);
while(inputStream.hasNext()){
String line= inputStream.next();
String[] values = line.split(",");
// this adds the currently parsed line to the 2-dimensional string array
lines.add(Arrays.asList(values));
}
inputStream.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
}
// the following code lets you iterate through the 2-dimensional array
int lineNo = 1;
for(List<String> line: lines) {
int columnNo = 1;
for (String value: line) {
System.out.println("Line " + lineNo + " Column " + columnNo + ": " + value);
columnNo++;
}
lineNo++;
}
}
}
_
手順を追って説明しましょう。
さらに3つのインポートを追加しました:ArrayList
、Arrays
およびList
-すぐに表示されます。これらはすべて、すべてのJDKで利用可能な標準ライブラリである_Java.util
_ライブラリから取得されます。
Javaのすべてのクラス名は大文字で始まります(慣例により-小文字でも構築されますが、この慣習に慣れる必要があります)-私はこれを「修正」しましたコード。
2次元配列List<List<String>> lines = new ArrayList<>()
を追加しました。これは最初は少しわかりにくいかもしれませんが、意味は、解析の結果を保持する変数lines
を作成することです。 _List<String>
_構文は、タイプパラメータList
を持つ generic typeString
-つまり、文字列のリストがあることを意味します。 _List<List<String>>
_全体は、文字列のリストのリスト、つまり2次元の文字列配列があることを意味します。
while
ループのlines.add(Arrays.asList(values))
を使用して、解析した行をこの2次元配列に追加できます。 Arrays.asList(values)
は、_String[]
_型と互換性が必要なため、_List<List<...>>
_配列をList
に変換します。これにより、行の長さが可変になります。
最後に追加した行は、2次元配列の内容を出力するだけであり、この配列の値にアクセスする方法の良い例を示しています。この構成についてさらにヘルプが必要な場合は、 foreachループのドキュメント を確認してください。
これを入力ファイル(_read_ex.csv
_)として指定すると:
_value_1-1,value_1-2,value_1-3,value_1-4
value_2-1,value_2-2,value_2-3,value_2-4
value_3-1,value_3-2,value_3-3,value_3-4
value_4-1,value_4-2,value_4-3,value_4-4
value_5-1,value_5-2,value_5-3,value_5-4
_
プログラムは次の出力を印刷します。
_Line 1 Column 1: value_1-1
Line 1 Column 2: value_1-2
Line 1 Column 3: value_1-3
Line 1 Column 4: value_1-4
Line 2 Column 1: value_2-1
Line 2 Column 2: value_2-2
Line 2 Column 3: value_2-3
Line 2 Column 4: value_2-4
Line 3 Column 1: value_3-1
Line 3 Column 2: value_3-2
Line 3 Column 3: value_3-3
Line 3 Column 4: value_3-4
Line 4 Column 1: value_4-1
Line 4 Column 2: value_4-2
Line 4 Column 3: value_4-3
Line 4 Column 4: value_4-4
Line 5 Column 1: value_5-1
Line 5 Column 2: value_5-2
Line 5 Column 3: value_5-3
Line 5 Column 4: value_5-4
_
お役に立てれば :)
私はJavaが初めてで、初心者が理解できるcsvをファイルに読み込む任意のメソッドに対してオープンになります。
Apache Commons 、 Apache Commons CSV プロジェクトの既存のソリューションを次に示します。 Apache Commons CSVパーサーガイド を参照してください。
箱から出してすぐに使用できます。
基本的なworfklowは次のとおりです。
List
および ArrayList
がJavaでどのように機能するかよくわからない場合は、ほとんどのJava Oracle Tutorial を含むオンラインチュートリアル。
Stackoverflowを検索 Commons CSVの使用に関する数百の投稿。