• 締切済み

Object[ ][ ]へのキャストについて

こんにちは。 csvファイルのデータをQueryRunner.batchメソッドでインサートしたいのです。 以下のメソッドでcsvファイルから取り出したデータをカンマで区切り、 Object[][]の形で帰したいのですが、うまくいきません。 次のExceptionが発生してしまいます。 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [[Ljava.lang.String; どのようにしたら良いか、ご教授願えないでしょうか。 お願いします。 private Object[][] getParm(List dataList, int colCnt){ List parmList = new ArrayList(); String data; for(Iterator ite = dataList.iterator(); ite.hasNext(); ){ data = (String) ite.next(); //Stringをフィールド毎の配列に変換 String[] fieldList = new String[colCnt]; //データのカラム数分の配列を作成 String[] tempList = data.split(","); System.arraycopy(tempList, 0, fifieldList); } return (String[][]) parmList.toArray(); }

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

みんなの回答

  • auty
  • ベストアンサー率58% (284/486)
回答No.2

・ エラーは、 data = (String) ite.next(); で起こっていると思われるので、まず引数 List dataList に、csvファイルの各行が文字列として入っているかどうかが疑われます。 まずそのことを確認してみてください。 ・ 次にメソッドを次のように置き換えて実行してみてください。 ------------------------------------------------------------ private static String[][] getParm(ArrayList dataList, int colCnt) { String[][] ss2 = new String[dataList.size()][]; int k=0; for (Iterator ite = dataList.iterator(); ite.hasNext(); k++) { String data = (String) ite.next(); ss2[k] = data.split(","); } return ss2; } ------------------------------------------------------------ ・ 何処でエラーが起こったかを知らせてもらえますか。

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

 private Object[][] getParm(List dataList, int colCnt){  // private String[][] getParm(List dataList, int colCnt){ //こっちにすべき   List parmList = new ArrayList();   String data;   for (Iterator ite = dataList.iterator(); ite.hasNext(); ){    data = (String)ite.next();    String[] fieldList = new String[colCnt];    String[] tempList = data.split(",");    System.arraycopy(tempList, 0, fifieldList); //不正かつ意味不明な呼び出し    //一体何のために別の配列にコピーすんの??, コピーしなくてもいいのでは?    //しかも、こんな無防備な操作では、ちゃんとcolCnt個あるのか、ヤバイよ.   }   return (String[][]) parmList.toArray(); // parmListは空のまま??   // return parmList.toArray(new String[1][1]); //こちらを使う   // ... ArrayListのドキュメンテーションを読んでください  }

関連するQ&A

  • [Ljava.lang.Stringってなんですか

    -1.824667,-1.759031,877.1089,3.06299 ,13.17086  … と12個のデータが並んでいるcsv形式のファイルを出力するため、String型で1440個の配列を準備し、その配列に何度も値を入れていくようにしたのですが全て、 [Ljava.lang.String;@ec4a87 という文字列になって出力されてきました。 12個から4個にしたら最初は正常に出力され、途中から最初の2個が上記のようになっていました。どうすれば解決できますか。できれば具体的に教えてください。

  • System.arraycopyの問題

    いつもお世話になります。 あるWeb上の記事で、配列コピーのメソッドで、Arrays.copyOfメソッドの紹介をする際、それと比較する形で、System.arraycopyメソッドについて以下の記述をしていました。 「しかし、System.arraycopyメソッドにはダウンキャストが必須だという問題があります。」 ダウンキャストが何をするのかは分かっています。 しかし、特段そのようなことはしなくても、同じ型の配列を用意し、コピーを行うことはできます。 例) String[] s1 = {"aa", "bb"}; String[] s2 = new String[s1.length]; System.arraycopy(s1, 0, s2, 0, s1.length); ここでいう問題が分かりませんでした。具体的に何を問題と言いたいのでしょうか。 宜しくお願い致します。

  • iteratorの再利用について

    コンテナの内容を変えた後に内容を変える前のiteratorを使用することはできないと聞きました。ので、連続して何らかのコンテナ内のデータを変更しつつ、探索する場合にも、iteratorは最初から探索を始めないといけないと思っています。 例えば以下のように #include <stdio.h> #include <list> struct data { int value; data(int value) {this->value = value;} }; typedef std::list<data> DataList; typedef std::list<data>::iterator DataIterator; bool EraseValue(DataList*dataList, int value) { DataIterator iterator= dataList->begin(); while(iterator != dataList->end()) { if(iterator->value == value) { dataList->erase(iterator); return true; } iterator++; } return false; } int main() { //データを入れる DataList dataList; for(int i=0;i<10; i++) dataList.push_back(data(i)); //指定のデータを探し、消す int Value[] = {4,5,7}; EraseValue(&dataList, Value[0]); EraseValue(&dataList, Value[1]); EraseValue(&dataList, Value[2]); //結果表示 DataIterator iterator = dataList.begin(); while(iterator != dataList.end()) { printf("%d\n",iterator->value); iterator++; } return 0; } ここで、新しい値の探索を始めるたびに、最初から探索をはじめる部分が無駄であると思っています。探索するデータは、上の例のように、必ず前回探したものの後にあることはわかっているとして、これより効率のよい方法はないでしょうか?自分の中での理想は、削除したiteratorの直前に使った(削除されていない)iteratorの位置から探索を始めるのがいい思っているのですが、これはどうやらできないこと(やってはいけないこと?)の様です。 コンテナをstd::listに限定した場合でも構いません。 ご教授よろしくお願いします。

  • APIの非奨励クラス?

    失礼致します。 質問させてください。 今、java.util.regex.PatternをインポートしてPattern下のquoteメソッドを使ったところ「java.lang.NoSuchMethodError: java.util.regex.Pattern.quote(Ljava/lang/String;)Ljava/lang/String;」 というエラーが出ました。 ローカルではこのメソッドを使い、問題なく動いているにもかかわらずです。PatternクラスはAPIに掲載されているのですがquoteはありませんでした。このメソッドは削除されたのでしょうか?誰かご存知の方、教えて頂けますでしょうか?

    • ベストアンサー
    • Java
  • Listのiteratorインターフェースについて

    Listのiteratorインターフェースについて教えてください。 ABCD EFGH NULL IJKL (cont) というような配列を持ったオブジェクトの各要素を順に読み、もし、その要素が'NULL'という文字列を持っていたらスペースに置き換えたいののですが、方法がわかなくて困っています。 Listのiteratorインターフェースに要素を追加したり、削除したりするメソッドがあることはわかったのですが、更新の方法はあるのでしょうか。 もし、あればそのメソッドを教えてください。

    • ベストアンサー
    • Java
  • 配列クラスのクラス名

    配列クラスのクラス名 配列クラスのクラス名を教えてください。 配列はクラスですよね。そこまでは分かります。 こんなコードを実行しましたが System.out.println((new int[0]).getClass()); System.out.println((new boolean[0]).getClass()); System.out.println((new String[0]).getClass()); System.out.println((new Integer[0]).getClass()); 親切にこのような結果を出力してくれます。 class [I class [Z class [Ljava.lang.String; class [Ljava.lang.Integer; 結果として配列が何というクラスなのかは分かりません。 (もしかして『[I』『[Z』『[L』という名前のクラスでしょうか?) 昔Javaのソースを読んだときに、配列クラスのファイルも 読んだことがあるような気がするのですが、 なんと言うクラスだったか忘れてしまいました。 パッケージ名+クラス名を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • public でないObjectはXMLEncoderで書き出せない?

    PublicでないObjectは、XMLEncoderで書き出せないのでしょうか? 以下のような処理を作成し、実行するとIllegalAccessExceptionが発生してしまいます。 PublicでないObject(Data)に対して、seAccessible(true)が設定できればいけそうなのですが、やり方がわからず悩んでいます。 class Data implements java.io.Serializable { public String m = "a"; public Data() { } public static void main (String args[]) throws Exception { Data data = new Data(); XMLEncoder e = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("/tmp/data.xml"))); e.writeObject(data ); e.close(); } } # java Data java.lang.IllegalAccessException: Class java.beans.Statement can not access a member of class Data with modifiers "public" Continuing ... java.lang.Exception: discarding statement XMLEncoder0.writeObject(Data0); Continuing ...

  • javaでリストにオブジェクトを入れたい

    ユーザー情報を配列にしたものをセッターを使い、オブジェクトをリストに入れる処理をしたいです。 例(yamada,pas1,山田) リストを使用しているのは後々他のユーザーを追加する予定の為です。 例(yamada,pas1,山田) (suzuki,pas2,鈴木) リストにlist.add("yamada")などと入力すれば表示させることが出来るのですが、 オブジェクトを入れるとうまくいきません。list.add(オブジェクト名); 実行するとコンソールに「GetUser@19e0bfd」のようなものが出てきます。どうすればよろしいでしょうか? ここから上は省略。カプセル化したゲッターセッターの処理をしています。 public static void main(String[] args){   GetUser gu = new GetUser();//ユーザー情報をnew      String name[]=new String[3];   name[0]="yamada";   name[1]="pas1";   name[2]="山田";   gu.setId(name[0]);   gu.setPass(name[1]);   gu.setName(name[2]);   List list = new ArrayList();   list.add(gu); }

    • ベストアンサー
    • Java
  • trim()メソッドの使用方法とキャストの仕方について

    こんばんは、今回はtrim()メソッドの使用方法とキャストの方法についてお伺い致します。 trimメソッドを使用して文字列の前後の空白を削除したいのですが、 通常 String str = " 「こんにちは」"; str = str.trim(); とコーディングしコンパイルして表示するとちゃんと「こんにちは」となるのすですが、これが ArrayList list = new ArrayList(); BufferedReader br= new BufferedReader(new FileReader(Test.txt); while((str = br.readLine()) !=null){ str = str.trim(); list.add(str); } br.close(); とコーディングしコンパイルは通るのですが、 「こんにちは」のままで"「"の前にある空白が削除されてません。 私なりに「型」の違いでが原因ではないかと思い、java.io.ArrayList型からjava.lang.String型へキャストしようとしているのですが、コンパイルエラーが出てしまします。 プログラムコードは ArrayList list = new ArrayList(); String s; s = (String)list; としています。 エラー内容は ScheduleControlCall.java:142: 変換できない型 出現: java.util.ArrayList 要求: java.lang.String s = (String)list; ^ エラー 1 個 となっています。 度々ですが、ご指導お願い致します。

    • ベストアンサー
    • Java
  • Jasminを使用して10桁のフィボナッチ数列を表すには・・・??

    初投稿です、よろしくお願いします。 プログラミング初心者で、まだ右も左もよく分からないヒヨッコですが、 この間学校でjasminコードというものを習い始め、まだちゃんと理解していないうちに、こんな問題を出されました。 ================================ 以下のコードをjasminで表しなさい。 public class exam2 { public static void main(String args[]) { dofib(9); } public static void dofib(int n) { int n1 = 0; int n2 = 1; int tmp; if ((n < 0) || (n == 0)) System.out.println("0"); for (int i = 0; i < n; i++) { System.out.println(n1 + " "); tmp = n2; n2 = n1 + n2; n1 = tmp; } } } フィボナッチ数列を10桁まで表示するコードです。 ================================ 私と友達が作ってみたjasminコードはこちらです。 .class public examples/Fibo .super java/lang/Object ; ; standard initializer .method public <init>()V aload_0 invokenonvirtual java/lang/Object/<init>()V return .end method .method public static main([Ljava/lang/String;)V .limit locals 5 .limit stack 10 getstatic java/lang/System/out Ljava/io/PrintStream; astore_1 bipush 10 istore_2 iconst_0 dup ;invokevirtual java/io/PrintStream/println(I)V; ;invokestatic java/lang/String/valueOf(C)Ljava/lang/String; invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V istore_3 bipush 1 istore 4 L0: iload 3 dup iload 4 dup ;invokestatic java/lang/String/valueOf(C)Ljava/lang/String; invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V iadd iload 4 istore 3 istore 4 iload_2 ifeq L1 iinc 2 -1 goto L0 L1: return .end method しかし、これではうまく動作しませんでした。 何か解決方法や提案など、ございましたら教えていただけたら幸いです。 どうぞよろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう