• ベストアンサー

初心者です。splitメソッドで、NoSuchMethodErrorが出ます。

こんにちは。 Javaの初心者です。 csvファイルから1行ずつ読み込み、それをsplitで配列に入れて 特定の文字を出力する、といったことをしたいと思っています。 ソースは以下のとおりです。 import java.lang.*; import java.io.*; public class TestJava { public static void main(String[] args) { try { BufferedReader br = new BufferedReader (new FileReader("in.csv")); BufferedWriter bw = new BufferedWriter(new FileWriter("out.csv")); String line = null; while ((line = br.readLine()) != null) { String[] inArray = line.split(","); String s = inArray[0].substring(2, 3); System.out.println (s); bw.write(line); bw.newLine(); } bw.flush(); br.close(); bw.close(); } catch (IOException e) { e.printStackTrace (); System.exit(-1); } } } コンパイルは通るのですが、実行すると、 C:\java\src>java TestJava Exception in thread "main" java.lang.NoSuchMethodError at TestJava.main(TestJava.java:19) というエラーが出てしまいます。 (19行目は、String[] inArray = line.split(",");の部分です) ネットで調べてみると、mainメソッドの書き方が間違っているのでは、 とあったので、何度も注意深く見てみたのですが mainメソッドに間違いはないように思えます。 また、クラスパスが通ってないのでは、ともあったのですが、 環境変数のclasspathに「C:\java\src」を設定しています。 どなたか分かる方いらっしゃいましたら、 ご教授いただけませんでしょうか? よろしくお願いいたします。

  • Java
  • 回答数4
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • kztk
  • ベストアンサー率53% (59/110)
回答No.2

Stringのsplit()メソッドは、「導入されたバージョン: 1.4 」となっていますので、1.4以降のjavacでコンパイルし、1.4未満のjavaで実行しているのではないでしょうか。java -versionで出てくるバージョンはいくつですか?もしも1.2や1.3ならば環境変数PATHの順序を見直すか、javaコマンドをフルパスで指定すれば解決すると思います。 #ただ、試しに手元の環境で1.5でコンパイル→1.3.1で実行すると、UnsupportedClassVersionErrorになってしまいました。1.4は手元にないので試せませんでした・・・。

参考URL:
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#split(java.lang.String)
ayu_cha
質問者

お礼

回答ありがとうございます。 動作確認までしていただき、ありがとうございます。 java -versionを実行したところ、 C:\java\src>java -version java version "1.3.1_01" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_01) Java HotSpot(TM) Client VM (build 1.3.1_01, mixed mode) と出てきました。 PATHの順序を見直して(一番最初に持って来ました)みたところ、 やはり同様のエラーが出たのですが、 javaコマンドをフルパスで指定したら、正常に動作しました。 すみません。 フルパスで指定したら動作する理由がよく分からないのですが、 binフォルダへのパスが通ってないのでしょうか? よろしくお願いいたします。

その他の回答 (3)

  • kztk
  • ベストアンサー率53% (59/110)
回答No.4

>binフォルダへのパスが通ってないのでしょうか? 通っていないのでしょう。 javaコマンドを打つ前にSETコマンドを打ってみてください。PATHの順序は期待した通りのものが表示されますか?

ayu_cha
質問者

お礼

お礼が遅くなってしまい、申し訳ございません。 下の方のお礼に書いたとおりですが、 pathの設定を間違っていました。 ご迷惑おかけして、申し訳ございませんでした。 ありがとうございました。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

>フルパスで指定したら動作する理由がよく分からないのですが、 binフォルダへのパスが通ってないのでしょうか? PATHはどのように変更しました? コンパイルや実行をしているコマンドプロンプトを 開いたままでコンパネ等から変更しても その変更はコマンドプロンプトの環境変数に反映されません。 コマンドプロンプトで PATH=... で設定するとか、コマンドプロンプトを 開きなおすとかしないといけません。

ayu_cha
質問者

お礼

お礼が遅くなってしまい、申し訳ございません。 pathをよく見てみたら、 binフォルダへのパスが間違っていました。 正しいパスを設定したところ、動作しました。 ご迷惑をおかけして申し訳ありませんでした。 ありがとうございました。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

質問にあるプログラムをコピペしてわたしのところでコンパイル&実行してみましたが、 何の異常もなく動作しました。 環境変数CLASSPATHを空にしても動きましたので、環境が何かおかしいような感じがします。 どのパッケージをインストールしましたか? デフォルトであれば、c:\program files\java の下にjdkのバージョン等の 番号つきでインストールされていると思いますが、どうなっていますか?

ayu_cha
質問者

お礼

回答ありがとうございます。 動作確認までしていただき、ありがとうございます。 やはり、環境がおかしいのでしょうか? パッケージ(インストールしたフォルダ名のことでしょうか?)は、 j2sdk1.4.2_15とありました。 他にも、c:\program files\java 以下に j2re1.4.2_15とjre1.6.0_02というフォルダがありました。 よろしくお願いいたします。

ayu_cha
質問者

補足

すみません。 上に書いているのですが、 javaコマンドをフルパスで指定したら、動作しました。 sakusaker7様へのお礼文を書いたあとで動かしたため、 補足が別になってしまい、申し訳ございません。

関連するQ&A

  • [JAVA]ProcessBuilderで「java -version」を実行できない

    以下のプログラムで「java -version」を実行しようとするとエラーになります。「java」だけですと実行できますが「-version」をつけるとエラーになります。 ---プログラムの内容--- import java.io.*; public class test4518 { public static void main(String[] args) throws Throwable{ ProcessBuilder pb = new ProcessBuilder(new String[]{"java -version"}); Process p = pb.start(); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } } ーーーエラーの内容ーーー Exception in thread "main" java.io.IOException: CreateProcess: "java -version" error=2 at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.<init>(Unknown Source) at java.lang.ProcessImpl.start(Unknown Source) at java.lang.ProcessBuilder.start(Unknown Source) at test4518.main(test4518.java:5)

    • ベストアンサー
    • 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
  • CSVファイルから特定の文字列を含む行を出力

    CSVファイルを読み込み、特定の文字列を含む行を出力するプログラムを作成しています。 出力メソッドを作り、呼び出したいのですがうまくいきません。 コンパイルは通りますが出力したファイルには何も書き込まれていない状況です。 ヒントだけでも頂けると幸いです。 よろしくお願いします。 import java.io.*; import java.util.*; public class Test{ static String[] data; static BufferedWriter writer = null; public static void main(String[] args) throws Exception { String line; BufferedReader reader = null; reader = new BufferedReader(new FileReader("Week.csv")); writer = new BufferedWriter(new FileWriter("New.csv")); while (reader.ready()) { line = reader.readLine(); if (line.contains("氏名")) { create(line); } else if (line.contains("月")) { create(line); } else if (line.contains("水")) { create(line); } else if (line.contains("金")) { create(line); } } } //メソッド static void create(String line) throws Exception { data = line.split(","); for (int i = 0; i < data.length; i++) { writer.print(data[i]); writer.println(); } } }

    • ベストアンサー
    • Java
  • CSV読み込み 文字化け

    失礼いたします。 以前のログを見てエンコードを設定してみたのですが、出力が文字化けします。ローカルファイルを読み込んでコンソール出力しているだけなのですが・・・。 分かる方、よろしくお願いします。 -------------------ソースはここから import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; // import java.io.FileReader; FileReaderからInputStreamReaderに変更済み import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class ReadCSV { public static void main(String[] args) { try { File csv = new File("C:\\AP.csv"); // BufferedReader br = new BufferedReader(new FileReader(csv)); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"EUC_JP")); // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"MS932")); while (br.ready()) { String line = br.readLine(); StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { System.out.print(st.nextToken() + "\t"); } System.out.println(); } br.close(); } catch (FileNotFoundException e) { キャッチ処理 }

    • ベストアンサー
    • Java
  • JavaのTCPソケット通信プログラムについて

    初めてJavaでTCPソケット通信を書いてみたのですが、質問です。ソケット通信をサーバーとクライアント側で確立した後、メッセージの送受信をやるとても簡素なプログラムを作成しました。一回目の送受信をするだけだと上手くいくのですが、同じコネクション内で二回目の送受信をするよう追記したところ動作がおかしくなりました。(一つ目のメッセージも受信しないまま画面が停止した状態になる)何が問題なのでしょうか。 (Receiver.java) public class Receiver { public static final int PORT = 30000; public static void main(String[] args) { try { ServerSocket serverSoc = new ServerSocket(PORT); Socket socket = null; System.out.println("Waiting for Connection.."); socket = serverSoc.accept(); System.out.println("Connection from "+socket.getInetAddress()); // receive message BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println("Message from sender ="+new String(br.readLine())); //send message←ここを追記するとおかしくなりました。 String message = "Hey This is receiver"; BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); System.out.println("I will send: "+message); bw.write(message); br.close(); bw.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } (Sender.java) public class Sender { public static final int PORT = 30000; public static void main(String[] args) { try { InetAddress LocalHost = InetAddress.getLocalHost(); InetSocketAddress socketAddress = new InetSocketAddress(LocalHost, PORT); Socket socket = new Socket(); socket.connect(socketAddress, 10000); //send message String message = "Hey This is sender"; BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); System.out.println("I will send: "+message); bw.write(message); // receive message←同じくここを追記するとおかしくなりました。 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println("Message from receiver ="+new String(br.readLine())); br.close(); bw.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }

  • iアプリのjavaでsplitは使えないのですか?

    iアプリの開発をしています。 サーバーから取得した文字列を split を使って String の配列にしようと思ったのですが、 JDK1.5 compile... C:\iDKDoJa5.0\apps\msho\src\mshoCanvas.java:336: シンボルを解決できません。 シンボル: メソッド split (java.lang.String) 場所 : java.lang.String の クラス msg = error_msg.split("\n"); エラー 1 個 javacの実行に失敗しました となってコンパイルエラーになります。どうも、splitが存在しないようなのですがそいう仕様なのでしょうか? 代わりのメソッドはindexOf()とsubstring()を使って簡単に作れそうではありますが、用意されているのならわざわざ作るのはバカバカしいので(作るのがバカバカしいのではなく、サイズが増えるのが)質問しました。

    • ベストアンサー
    • Java
  • BufferedReaderで配列のデータを取り出したい

    PrintWriterで配列のデータを書き込み、 BufferedReaderで書き込んだデータを呼び出したい のですが、下記のソースで書き込むと [Ljava.lang.String;@1add2dd のように表示されてしまいます。 テキストファイルに 1,Server1 のような感じで 書き込んで読み込むにはどのようにしたら いいでしょうか? すみません、ご教授下さい。 よろしくお願いします。 import java.io.*; public class IOTest { public static void main(String[] args) { try{ PrintWriter pr = new PrintWriter( new BufferedWriter(new FileWriter("test.txt")),true); String index = "1"; String serverName = "Server1"; String Server [] = {index, serverName}; pr.println(Server); System.out.println("登録したデータは:" + Server + "です。\n"); BufferedReader br = new BufferedReader( new FileReader("test.txt")); String line; while((line = br.readLine()) != null){ System.out.println("取り出したデータは:" + line + "です。"); } }catch(Exception e){ e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • エラーの原因がわかりません

    JAVA初心者ですが、ファイル入力を行うプログラムを実行 すると、エラーが出ますが、そのエラーの原因が まったく見当がつきません。 誰か教えてください。 ------------読み込みデータ(loc.dat) 2 11 1 4 1 5 7 1 3 7 7 2 12 11 1 4 1 11 12 4 1 5 3 1 1 11 13 4 1 5 2 1 -------------プログラム import java.io.*; class ExReader {   public static void main(String[] args) { try { //読み込みファイル指定 FileReader fr = new FileReader("loc.dat"); BufferedReader br = new BufferedReader(fr); //ファイルから1行ずつ読み込む String s; while ((s = br.readLine()) != null) { System.out.println(s); } //読み込みファイルをクローズする br.close(); } catch (Exception e) { System.out.println("err: "+e); System.exit(1); } } } ---------------コンパイル結果 C:\JAVA\sim>javac ExReader.java ExReader.java:7: シンボルを解決できません。 シンボル: コンストラクタ FileReader (java.lang.String) 場所 : FileReader の クラス FileReader fr = new FileReader("loc.dat"); ^ ExReader.java:8: シンボルを解決できません。 シンボル: コンストラクタ BufferedReader (FileReader) 場所 : java.io.BufferedReader の クラス BufferedReader br = new BufferedReader(fr); ^ エラー 2 個

    • ベストアンサー
    • Java
  • FileWrite()メソッド

    すいません、少しお時間を頂きたいと思います。今コマンドライン上でファイルを作ろうとしています。ソースは結城浩氏の著書で使われている、ネット上から無料でダウンロードできるソースを使っています。以下の通りです。 import java.io.*; public class FileWrite{ public static void main(String[] args) { if (args.length != 1) { System.out.println("使用法:java WriteFile1 作成ファイル"); System.out.println("例:java WriteFile1 output.txt < input.txt"); System.exit(0); } String filename = args[0]; try { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filename))); String line; while ((line = reader.readLine()) != null) { writer.println(line); } reader.close(); writer.close(); } catch (IOException e) { System.out.println(e); } } } ところが、これをコンパイルして実行までは出来るのですが、いざ因数(=ファイル名)を与えるとコマンドプロンプトがプロンプトのない状態で停止してしまいます。 javacのあるディレクトリ>java FileWrite abc.jsp と入力しています。(FileWriteはクラス名です。) また、拡張子の有無は関係ないようです。 何が悪いのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • 簡単な入力出力のプログラムの間違いがわかりません

    こんにちは、さんたと申します。 よろしくお願い致します。 次のプログラムは、本に載っていたものを写したものです。何回も見直すのですが、エラーが出て止まってしまいます。もし、お分かりになられましたら、教えて下さいましたら幸いです。 よろしくお願い致します。 簡単な入力出力のプログラム(キーボードからの入力を読み込んで、画面に出力する) ********************************* c:\java_study>javac p2.java p2.java:7: ';' がありません。 While((line = in.readLine()) != null) { ^ エラー 1 個 ******************************* import java.io.*; public class p2 { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String line; While((line = in.readLine()) != null) { System.out.println(line); } } }

    • ベストアンサー
    • Java

専門家に質問してみよう