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

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

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

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

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

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

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

1回答

4062閲覧

JAVAで起こっているエラーについて(CSVファルを読み込む)

daityan

総合スコア9

CSV

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

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

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

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2021/12/31 02:15

前提・実現したいこと

お世話になっております。
JAVAプログラムで起こっているのエラーについて質問です。

CSVフィアルの内容を読み込むという単純なプログラムを作成中です。
まだ完成しておりませんが、途中まで作成したところでプログラムを動かしてみると下記エラーが発生しております。

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

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/ObjectUtils at com.opencsv.CSVParser.<init>(CSVParser.java:99) at com.opencsv.CSVReader.<init>(CSVReader.java:99) at SampleClass.writeDataToCSV(SampleClass.java:20) at SampleClass.main(SampleClass.java:76) Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.ObjectUtils at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 4 more

ソースコード

import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import com.opencsv.CSVReader; import com.opencsv.exceptions.CsvValidationException; public class SampleClass { //CSVファイルを読み込むメソッド public static void writeDataToCSV(String filePath) throws IOException{ CSVReader reader = null; try { reader = new CSVReader(new InputStreamReader(new FileInputStream(filePath),"SHIFT-JIS")); String[] cellLine; while((cellLine = reader.readNext()) != null) { } } catch(IOException | CsvValidationException e) { e.printStackTrace(); System.out.println("ファイルの編集に失敗しました"); }finally { if(reader != null) { try { reader.close(); }catch(IOException e) { e.printStackTrace(); } } // writer.close(); } } public static void main(String[] args) throws IOException { //CSVファイル作成メソッドの呼び出し writeDataToCSV("D:\Java\Eclipseワークスペース\生成物\サンプル.csv"); } }

試したこと

○下記サイトの情報等を参考にスペルミスやクラスパスが読み込めていない等の可能性を考え色々と試してみているのですが、エラーが解消できないでおります。
https://searchman.info/tips/1560.html

・インターネット上でダウンロードしたopencsv-5.5.2.jarというファイルをパスに設定しております。クラスパスの設定方法は下記サイト等を参考にしております。
https://itsakura.com/eclipse-add-classfolder

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

Eclipseのバージョンは2021-12 RC1 (4.22.0 RC1)になります。

些細なことでもご意見ご教授いただけますと幸いです。
どうぞ宜しくお願いいたします。

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

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

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

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

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

m.ts10806

2021/12/31 03:07

import書いてみましたか? import org.apache.commons.lang3.ObjectUtils;
jimbe

2021/12/31 07:54

opencsv のドキュメントにはどのようなライブラリが必要か書いてないでしょうか。 p.s. ご質問タイトル・本文に誤字脱字があります。
guest

回答1

0

Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.ObjectUtils

lang3が読めてなさそうです。

opencsv-5.5.2.jarがどういうものなのか知らないのですが、Mavenリポジトリのそれらしいものを確認するに

  • OpenCSVは内部でApache Commons Lang3という別のライブラリを使っている(他にもいくつか使っていそうですが)
  • しかしクラスパスから当該のライブラリを見つけられなかったのでうまく動かない

ということかなと思います。

解決の方針としては、依存しているもののjarを順番に集めてきてクラスパスに足すとか、そもそも依存関係を管理してくれるビルドツールを使うことになるのかなと(例えばGradleやMavenですが、記憶がかなり怪しいものの、もしかするとEclipse標準で組み込まれているかもしれません)。

2022/01/01: コメントを踏まえた追記

追加での質問となり大変恐縮ですが「解決の方針としては、依存しているもののjarを順番に集めてきてクラスパスに足す」とのご教示にたいして、commons-lang3-3.12.0.jarなどのJarファイルをネットよりダウンロードし、これらをプロジェクトフォルダのlibディレクトリに配置し、Eclipseにてクラスパスに指定いたしました。

ここまでのアプローチとしてはご教授いただいたこと実行できておりますでしょうか?(なぜかEclipse実行時に「クラスパスによって参照されているアーカイブは存在しない」旨のエラーが発生したため、理解しやろうとしていること自体が間違っていないかの確認となります。)

commons-lang3のjarをダウンロードしてきてクラスパスに足す、という大まかな方針は妥当なように思います。libディレクトリに配置するものなのかは、またエラーの内容については、プロジェクトの個別設定などあると思いますので、ちょっとわかりかねます。

提示のソースを改変した上で、コマンドラインにて簡単に動作確認しました。やはり方針自体に問題はなさそうでcommons-lang3さえ足せば少なくとも表面的には動作しそうです。あとはEclipseの設定が何か変とかそういう話になるのかなと。

console

1$ ls 2commons-lang3-3.12.0.jar opencsv-5.5.2.jar sample.csv SampleClass.class SampleClass.java 3$ cat sample.csv 4a,b,c 51,2,3 6$ cat SampleClass.java 7import java.nio.file.Files; 8import java.nio.file.Paths; 9import java.util.Arrays; 10 11import com.opencsv.CSVReader; 12 13public class SampleClass { 14 public static void main(String[] args) throws Exception { 15 CSVReader reader = new CSVReader(Files.newBufferedReader(Paths.get("sample.csv"))); 16 String[] cellLine; 17 while((cellLine = reader.readNext()) != null) { 18 System.out.println(Arrays.toString(cellLine)); 19 } 20 } 21} 22$ javac -cp opencsv-5.5.2.jar SampleClass.java 23$ java -cp opencsv-5.5.2.jar:commons-lang3-3.12.0.jar:./ SampleClass 24[a, b, c] 25[1, 2, 3]

投稿2021/12/31 03:16

編集2022/01/01 09:29
saka1

総合スコア28

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

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

m.ts10806

2021/12/31 03:20

>(例えばGradleやMavenですが、記憶がかなり怪しいものの、もしかするとEclipse標準で組み込まれているかもしれません)。 All in Oneの場合はどちらも標準で使えます。
daityan

2022/01/01 08:13

saka1さん お世話になります。ご回答いただきありがとうございます。 「OpenCSVは内部でApache Commons Lang3という別のライブラリを使っている」旨、ご教授いただきありがとうございます。 大変参考になります。 追加での質問となり大変恐縮ですが「解決の方針としては、依存しているもののjarを順番に集めてきてクラスパスに足す」とのご教示にたいして、commons-lang3-3.12.0.jarなどのJarファイルをネットよりダウンロードし、これらをプロジェクトフォルダのlibディレクトリに配置し、Eclipseにてクラスパスに指定いたしました。 ここまでのアプローチとしてはご教授いただいたこと実行できておりますでしょうか?(なぜかEclipse実行時に「クラスパスによって参照されているアーカイブは存在しない」旨のエラーが発生したため、理解しやろうとしていること自体が間違っていないかの確認となります。) コメントいただけますと幸いです。どうぞ宜しくお願いいたします。
daityan

2022/01/08 13:43

saka1さん お返事が遅くなり申し訳ございません。 ご回答いただきありがとうございます。 私のEclipse1やJavaに対する知識が浅く解決できていないのですが色々と教えていただき大変勉強になりました。 ありがとうございました。感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問