Java言語で,テキストデータを読み込み,それを配列に格納したいのですが,
どうすればいいのでしょうか?
配列に格納するときに,うまい具合にfor文などで一気に格納したいです。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

配列というのはどの配列なのでしょうか?


オブジェクトならどのオブジェクトの配列なのでしょう。
String[]ですか?もしやbyte列ですか?

もしかしてC言語プログラマの方かもしれないですが、
Javaの場合は何かしらのオブジェクトを生成するのがよろしいかと。

なお、たいがいのことはJavaのリファレンスで事足ります。

参考URL:http://java.sun.com/j2se/1.3/ja/docs.html

この回答への補足

解答ありがとうございます。
Stringです。
オブジェクトの生成ですね,わかりました。調べてみます。

補足日時:2001/06/12 08:34
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QJavaの質問です。テキストファイルを読み込み、配列にデータを格納する。

お世話になっております。

現在テキストファイルを読み込み、それを表示する機能を作成しております。
単純に表示するだけでしたら作成できたのですが、後ほど応用したいので、下記のテキストファイルのデータを、名前なら「name」に、職業なら「job」に、性別なら「sex」にといったように、1行ずつ読み取ってそれぞれの配列に入れたいのですが、自分なりに調べてみたり、試したのですが、1つの配列に入れるのが精一杯で、分かりませんでした。

どなたかお力をお貸しください。よろしく御願い致します。

---------------------------//テキストファイル
田中
医者
男性

大林
SE
女性
---------------------------

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

class yomikomi{
public static void main(String args[]){
ArrayList<String> list = new ArrayList<String>();
int i=0;
try{
File file = new File("sample.txt");

if (checkBeforeReadfile(file)){
BufferedReader br = new BufferedReader(new FileReader(file));

String line = null;
i=0;
while((line = br.readLine()) != null){
System.out.println(line);
list[i]=line;
i = i +1;
}

br.close();
}else{
System.out.println("ファイルが見つからないか開けません");
}
}catch(FileNotFoundException e){
System.out.println(e);
}catch(IOException e){
System.out.println(e);
}
}

private static boolean checkBeforeReadfile(File file){
if (file.exists()){
if (file.isFile() && file.canRead()){
return true;
}
}

return false;
}
}

お世話になっております。

現在テキストファイルを読み込み、それを表示する機能を作成しております。
単純に表示するだけでしたら作成できたのですが、後ほど応用したいので、下記のテキストファイルのデータを、名前なら「name」に、職業なら「job」に、性別なら「sex」にといったように、1行ずつ読み取ってそれぞれの配列に入れたいのですが、自分なりに調べてみたり、試したのですが、1つの配列に入れるのが精一杯で、分かりませんでした。

どなたかお力をお貸しください。よろしく御願い致します。

...続きを読む

Aベストアンサー

javaの文法はよく知らないので細かいところは間違っているかもしれませんが……
データの種別を表す変数cateを用意して、その値に応じて代入する配列を変えれば良いのではないでしょうか。

----------------------
ArrayList<String> name = new ArrayList<String>();
ArrayList<String> job = new ArrayList<String>();
ArrayList<String> sex = new ArrayList<String>();


int i = 0;
int cate= 0; //カテゴリ 0:name 1:job 2:sex


String line = null;
i=0; //           ここは、上で0に初期化してますよ。
while((line = br.readLine()) != null){
System.out.println(line);
switch(cate){
case 0:
name[i] = line;
break;
case 1:
job[i] = line;
break;
case 2:
sex[i] = line;
break;
}
i = i +1;
cate = cate + 1;
if(cate > 2) cate = 0;
}

javaの文法はよく知らないので細かいところは間違っているかもしれませんが……
データの種別を表す変数cateを用意して、その値に応じて代入する配列を変えれば良いのではないでしょうか。

----------------------
ArrayList<String> name = new ArrayList<String>();
ArrayList<String> job = new ArrayList<String>();
ArrayList<String> sex = new ArrayList<String>();


int i = 0;
int cate= 0; //カテゴリ 0:name 1:job 2:sex


String line = null;
i=0; //           ここは、上...続きを読む

Qファイルの読み込み、配列に格納

お世話になります。Java初心者です
Javaプログラムを実行する同じディレクトリにあるテキストファイルとデータファイルをコマンドラインで同時に読み込み
それぞれ違う配列に格納したいのですが、1つのファイルの読み込みは出来ても2つ同時の読み込みと配列格納でつまづいています。

読み込むテキストファイルには以下のような1行の文が、
Dr. Fujita is great!

読み込むデータファイルには以下のような文字が書かれています。
AC 4C 7C 10C KC 3D 6D 9D QD JB 3C 6C 9C QC 2D 5D 8D JD JA 2C 5C 8C JC AD 4D 7D 10D KD

配列に格納する際、テキストファイルの場合は全て大文字にし、アルファベット以外の記号(スペース含)は全て消して配列に格納します。
上の例でいえばこのような状態で格納です↓
DRFUJITAISGREAT

データファイルの場合は、2組1文字をそのまま配列に格納です。ただしスペースは飛ばします。
上の例でいえば、ACを配列0に、4Cを配列1に、7Cを配列2に、、、と格納していきます。

import java.io.*;
public class sample{
public static void main(String[] args){
try{
FileReader f = new FileReader(args[0]);
BufferedReader b = new BufferedReader(f);
Strings;
while((s=b.readLine())!=null){
System.out.println(s); ←読み込んでるか確認
}
}catch(Exception e){
System.out.println(no file);
}
}
}

ファイルの指定は実行時に、java sample datafile.dat textfile.txt と指定します。
読み込むプログラムは以上のように書いたのですが、2つファイルを読み込むにはどのように記述したらよいのでしょうか。
FileReaderを2つ作成?しても最初に指定したデータファイルの内容がまた読み込まれるだけで・・・
読み込んだら変数sに入りますが、たとえばs.substring()なんかでわけて配列に入れようとしても、s.substring()←ここでエラーが出てしまいます。
あと、Dr. Fujita is great!のアルファベットを大文字にし、記号(スペース含)を飛ばして格納するにはどうしたらよいのでしょうか。

宜しくお願いします

お世話になります。Java初心者です
Javaプログラムを実行する同じディレクトリにあるテキストファイルとデータファイルをコマンドラインで同時に読み込み
それぞれ違う配列に格納したいのですが、1つのファイルの読み込みは出来ても2つ同時の読み込みと配列格納でつまづいています。

読み込むテキストファイルには以下のような1行の文が、
Dr. Fujita is great!

読み込むデータファイルには以下のような文字が書かれています。
AC 4C 7C 10C KC 3D 6D 9D QD JB 3C 6C 9C QC 2D 5D 8D JD JA 2C 5C 8C JC...続きを読む

Aベストアンサー

まずコンパイルエラーの対処方法ですが
>System.out.println(no file);
ここはno fileという文字列を標準出力したいのでしょうか?
そうであれば、no fileを"no file"の様に""で囲んであげてください。

>String[] da = s.split("\\s+"); ←ここのsでエラー。変数sが見つけられないと出ます・・・
>s2 = s2.toUpperCase(); ←ここのs2でエラー。sと同じエラーです
>String[] ta = s2.split("[^A-Z]+"); ←ここのs2でエラー
変数sとs2がスコープ切れしています。
ローカル変数のスコープは宣言したブロックの内側で、宣言した行以降で有効です。
ですので、try{~}の中の処理に続けて記述してやれば良いと思います。

ですが、それでコンパイルが通っても、以下の記述に問題があるので、恐らく実行時例外がおきます。
>while((s=b.readLine())!=null){
>}
>while((s2=b2.readLine())!=null){
>}
このやり方ではwhileブロック終了後のsとs2は常にnullになります。
よって、後のsplitメソッドを呼ぶ段でNullPointerExceptionがスローされるはずです。
ファイルの内容を一行取得するだけであれば、whileを使う必要は無いです。
改行文字を含んでいる場合を考慮する必要があるならば、それならそれで、もう少し工夫が必要です。

以上です。

まずコンパイルエラーの対処方法ですが
>System.out.println(no file);
ここはno fileという文字列を標準出力したいのでしょうか?
そうであれば、no fileを"no file"の様に""で囲んであげてください。

>String[] da = s.split("\\s+"); ←ここのsでエラー。変数sが見つけられないと出ます・・・
>s2 = s2.toUpperCase(); ←ここのs2でエラー。sと同じエラーです
>String[] ta = s2.split("[^A-Z]+"); ←ここのs2でエラー
変数sとs2がスコープ切れしています。
ローカル変数のスコープは宣言したブロック...続きを読む

Q抽象クラスとオブジェクトを格納する配列(java)

独習java第4版でわからない所があります。

abstract class Widget {
String color;
abstract int getMass();
public String toString() {
return getClass().getName() + ": " +
color + ", " + getMass();
}
}

class WidgetA extends Widget {
final static int MASS = 4;

WidgetA(String color) {
this.color = color;
}

int getMass() {
return MASS;
}
}

class WidgetB extends Widget {
final static int MASS = 1;

WidgetB(String color) {
this.color = color;
}

int getMass() {
return MASS;
}
}

class WidgetC extends Widget {
final static int MASS = 5;

WidgetC(String color) {
this.color = color;
}

int getMass() {
return MASS;
}
}

class WidgetD extends Widget {
final static int MASS = 17;

WidgetD(String color) {
this.color = color;
}

int getMass() {
return MASS;
}
}

class WidgetTypes {
static int NUMWIDGETS = 6;

public static void main(String args[]) {
// 部品を格納する領域を宣言して割り当てる
Widget widgets[] = new Widget[NUMWIDGETS];

// 部品を作成する
widgets[0] = new WidgetC("Red");
widgets[1] = new WidgetA("Green");
widgets[2] = new WidgetD("Yellow");
widgets[3] = new WidgetB("Magenta");
widgets[4] = new WidgetA("Black");
widgets[5] = new WidgetC("White");

// 部品を処理する
int totalMass = 0;
for(int i = 0; i < NUMWIDGETS; i++) {
Widget w = widgets[i];
System.out.println(w);
totalMass += w.getMass();
}

// 総重量を表示する
System.out.println("Total mass = " + totalMass);
}
}

これはある問題の解答ですが、僕にはどうしても理解出来ない部分があります。
mainのforループ内で

Widget w = widgets[i];

totalMass += w.getMass();

となっています。
この仕組がわかりません。
まず Widget w = widgets[i] でWidget型の変数wにWidget型のwidget[i]を代入しているのにw.getMass()がエラーにならない理由がわかりません。(Widgetクラスは抽象クラスなのにwがWidgetクラスのインスタンスになっている?)
これは 抽象メソッド( abstract int getMass() ) があるためでしょうか?

ちなみにWidgetクラスとそのサブクラスからこの抽象メソッドを削除したらコンパイルエラーが出ました。
ではなぜ抽象クラスの抽象メソッドから、そのサブクラスのメソッドまで範囲が伸びるのでしょうか?
どういう仕組でしょうか?

この質問を書きながら思ったのですが、どうも配列の仕組みや抽象クラス・メソッドの仕組み、「オブジェクト」と「インスタンス」の違いがよくわかってないようです。
多分問題の本質はそこにあると思うんです。

駄文で申し訳ないです。
よろしくお願いします。

独習java第4版でわからない所があります。

abstract class Widget {
String color;
abstract int getMass();
public String toString() {
return getClass().getName() + ": " +
color + ", " + getMass();
}
}

class WidgetA extends Widget {
final static int MASS = 4;

WidgetA(String color) {
this.color = color;
}

int getMass() {
return MASS;
}
}

class WidgetB extends Widget {
final static int MASS = 1;

WidgetB(String color) {
this.color =...続きを読む

Aベストアンサー

質問者さんがわかっていないのは「ポリモーフィズム」ですね。それはさておき、

> Widget w = widgets[i] でWidget型の変数wにWidget型のwidget[i]を代入しているのに

widgets[i]に入っているのはWidgetクラスのインスタンスではなく、
WidgetCやWidgetAやWidgetDクラスのインスタンスです。

具体的には

widgets[0] = new WidgetC("Red");

としているのですから、forループの最初(i=0)の

Widget w = widgets[i];
System.out.println(w);
totalMass += w.getMass();

でwに代入されるのは、WidgetCクラスのインスタンスです。
w.getMass()で呼ばれるのもWidgetCクラスのgetMass()です。

Qファイルから一行を読み込み配列に格納したい

すみません、初心者です。Javaでテキストファイルから一行の文字列を読み込み、Stringの配列に格納したいと思っています。具体的には、マシンの/tmp/test.txtを読み込み、空白行は無視して格納したいです。ウェブを参考にして、以下のようには出来たのですが、最初にStringの配列を20個宣言しており、これをどうにかテキストファイルの行(マイナス空白行)の数だけ宣言させたいです。(理由はファイルによっては想定以上の個数の場合も有り得ますし、余分なメモリを使用することになるのと、後からこの配列を使用しやすい、といった諸々で。。)以下のコードをどのように変えると実現出来るかご教示頂けませんでしょうか。
(一行あたりの文字列はつながっており、空白が間に入る事はありません)
import java.io.*;
public class test {
public static void main(String[] args) throws Exception {
int i=0;
String[] str = new String[20];
FileReader fr = new FileReader("/tmp/test.txt");
StreamTokenizer st=new StreamTokenizer(fr);
while(st.nextToken()!=StreamTokenizer.TT_EOF) {
System.out.println(st.sval+" ");
str[i]=st.sval;
i++;
}
fr.close();
}
}

(test.txtが以下の場合)
-----------------------
fdjosa
djsoafdjfdajof
jsoafds
fdsaoofdafd

fdjso

fjds

-----------------------
(配列は以下になることを想定)
str[0]=fdjosa
str[1]=djsoafdjfdajof
str[2]jsoafds
str[3]=fdsaoofdafd
str[4]=fdjso
str[5]=fjds
(*配列数であるstr.lengthは6)

すみません、初心者です。Javaでテキストファイルから一行の文字列を読み込み、Stringの配列に格納したいと思っています。具体的には、マシンの/tmp/test.txtを読み込み、空白行は無視して格納したいです。ウェブを参考にして、以下のようには出来たのですが、最初にStringの配列を20個宣言しており、これをどうにかテキストファイルの行(マイナス空白行)の数だけ宣言させたいです。(理由はファイルによっては想定以上の個数の場合も有り得ますし、余分なメモリを使用することになるのと、後からこの配列を使...続きを読む

Aベストアンサー

Listを使ってみてはいかがでしょう?

空白行を飛ばすのなら、
if(st.sval.equals("")) continue;
とかどうでしょう?

参考URL:http://www.j2ee.me/javase/ja/6/docs/ja/api/java/awt/List.html

QExcelのデータをJavaの配列に格納したいのですが。

JavaでExcelを取り込もうと思ったのですが、うまく出来ません。シートを指定してシート内のデータをすべて取り込みたいと思っております。JDBCや、POIなどを使用するのがいいのでしょうか。サンプルや参考サイトなどがありましたらいただけますでしょうか。よろしくお願いいたします。

Aベストアンサー

office2003ならxmlでやり取り可能。
http://www.itarchitect.jp/technology_and_programming/-/10977.html

POI
http://www.javadrive.jp/poi/

JExcelAPI
http://vapour.s22.xrea.com/javadojo/index.php?Java%A4%C7Excel

個人的にはJavaでExcel操作はいろいろ問題が出ることがあって業務アプリケーションでは使いたくないですね。どうしてもといわれればやるけど、使用範囲を限定しておかないと後で泣きを見るかもしれない。


人気Q&Aランキング

おすすめ情報