• ベストアンサー
  • すぐに回答を!

テキストファイルが読み込めない

みなさんはじめまして、下記ソースなんですが「FileInputStream fi = new FileInputStream(inputFile);」の手前までは処理が流れるの ですが、その後の処理が流れなくて困っています。 ターゲットとなる「test.txt」ファイルはHTML・JAVAソースファイル クラスファイルと同じフォルダに存在します。 特に保存先等を指定していないので、必然的に同じフォルダ内を見てフ ァイルを読み込みに行くんですけど、読み込まず、そのまま処理が流れ てしまいます。 どこかやり方がいけないところがあるんでしょうか? public String FileInput(){ byte data[] = new byte[16]; String number = ""; try { File inputFile = new File("test.txt"); FileInputStream fi = new FileInputStream(inputFile); /* データを読み込み */ if(fi.read(data)== 16){       /* 0バイト目から9バイト目までを読み込み */ if(new String(data,0,9).equals("010105502")){         /* 0バイト目から16バイト目までをnumberに代入 */ number = new String(data,0,16); } } fi.close(); } catch(FileNotFoundException e){ e.printStackTrace(); } catch(IOException e){} return(number); }

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数588
  • ありがとう数5

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

  • ベストアンサー
  • 回答No.2
  • snnk
  • ベストアンサー率60% (3/5)

メソッドしか書かれていないので、構成がよくわからないのですが、 このtest.txtファイルはメインを起動している同一ディレクトリ内に存在しているのでしょうか? もしくはこのメソッドが存在しているクラスがメインなのでしょうか? ファイルインプットストリュームの実装までは、 流れているとの事ですが、それ以降はどうなっているのでしょうか? FileNotFoundExceptionがcatchされているとか、 その他のExceptionがcatchされているとか。。。 たぶん、起動ディレクトリにファイルが無いからだと思われますよ。 何だったら、絶対パスでファイル名を記述してください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

どこがいけないのか?等にばっかり目を取られ、絶対パスで記述をして いませんでした。 それでやってみた所、うまくいけました。 どうもありがとうございました。

関連するQ&A

  • Javaでのカンマで配列を分ける方法

    こんにちは。 カンマ区切りで入力されているデータを2次元配列に格納したいのですがよくわかりません。 それとデータをtxtファイルから入力する方法で配列を入力した分だけ作ることはできますでしょうか? 現在のプログラムは最初に配列を1000個用意する形になっているので効率的とは言えないと思うのですが・・・。 以下プログラムを載せます。 public String[] datain(){ String[] data = new String[1000]; String inputFileName; int i = 0; // 読み込むファイルの名前 inputFileName = "D:\\a.txt"; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); try { // 入力ストリームの生成 FileInputStream fis = new FileInputStream(inputFile); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); // テキストファイルからの読み込み String d; while ( ( d = br.readLine()) != null ) { data[i] = d; i += 1; } br.close(); } catch(Exception e) { e.printStackTrace(); } return data; } というメソッドです。 戻り値を返した後でも前でもいいので、 --データ-- (a.txt) あ,い,う,え,お か,き,く,け,こ さ,し,す,せ,そ ↓このように取り込みたいのです。 --配列-- [0,0] = あ  [0,1] = い  [0,2] = う  [0,3] = え  [0,4] = お [1,0] = か  [1,1] = き  [1,2] = く  [1,3] = け  [1,4] = こ [2,0] = さ  [2,1] = し  [2,2] = す  [2,3] = せ  [2,4] = そ よろしくお願いします。

    • ベストアンサー
    • Java
  • javaで大容量テキストファイルの読み込みについて

    お世話になっております。 現在javaにて大容量のテキストファイル(100M以上)を読み込んで、 特定の文字が含まれている行のみを別ファイルへ抽出するという プログラムを作成しています。 現在のロジックでは、 File file = new File( "読み込みファイル" ); byte[] b = new byte[ (int) file.length() ]; FileInputStream fis = new FileInputStream(file); fis.read(b); String str = new String(b, "Shift-JIS"); return str; 上記の様なのようなロジックのメソッドを作成し、 返り値の文字列を改行コードでsplitし、パターンマッチングして行を抽出する方法をとっています。 しかしこの方法だと、OutOfMemoryErrorが発生していまい、 30MB以上のファイルを読み込むことができません。 原因がJVMのメモリ領域の問題なのは理解していますが、 readLineをでためしてみると処理終了があまりにも遅すぎるため、 なるべく現在の手法を改良する方向で作成したいのですが、 一回目 :0 ~ 30000000byte まで 二回目 :30000001 ~ 60000000byte まで の様にJVMの設定はいじらない方法でファイルのデータを、 指定バイトから指定バイトまで読み込む方法等なないでしょうか? それ以外でも処理が早く、 大容量のテキストファイルを読み込む方法がありましたら、 そちらでも問題ありません。 ぜひとも知恵をお貸しください。 宜しくお願いします。

    • ベストアンサー
    • Java
  • レコード長からのbyteスキップ設定について

    QNo.8229324から あらたに新規でご質問させて頂きます。 1レコードごとに10byteあったとします。 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 レコード長からスキップ設定を35byteと設定したとします。 40byteごとに頭の付与された5byteをスキップさせたいのですが なにかサンプル及びアドバイス頂けますでしょうか? 仕様案 (1)まずはレコード先端の5byteをスキップ (2)次は35byteを超えた時点で5byteスキップを繰り返し。 どうぞ宜しくお願い致します。 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.io.ByteArrayOutputStream; public class dat{ public static void main(String[] args) { String inputFileName = ""; String outputFileName = ""; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); File outputFile = new File(outputFileName); try { FileInputStream fis = new FileInputStream(inputFile); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream(outputFile); BufferedOutputStream bos = new BufferedOutputStream(fos); byte[] buf = new byte[17]; int len = 0; while ((len = bis.read(buf, 0, 17)) == 17) { bos.write(buf, 0, 17); } bos.flush(); bos.close(); bis.close(); } catch(Exception e) { e.printStackTrace(); } }

    • ベストアンサー
    • Java

その他の回答 (2)

  • 回答No.3

テスト環境がわかりませ。 これは、アプレットですか?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

詳しく書かずすいませんでした。また何かわからない事が出てきましたら その時はよろしくお願いします。

  • 回答No.1

別のディレクトリの test.txt を見に行ってるとか。。。 File inputFile = new File("test.txt"); FileInputStream fi = new FileInputStream(inputFile); の2行を File outputFile = new File("test.out"); FileOutputStream fo = new FileOutputStream(outputFile); に変えたら、test.out はどこに作られるでしょうか?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

他の方に教えてもらい何とかいけるようになりました。 ですが、こう言ったやり方で、どこがいけないのか?と言う調べ方を 知ることができ、ちょっと勉強になりました。 どうもありがとうございました。

質問者からの補足

happy_peopleさんに言われた通りやってみた所、どこにもファイル は作られませんでした。 ファイル自体は「ファイルやフォルダの検索」ですべてのハードディス クを検索し、つけたファイル名はもちろん、その日1日に該当するファ イルを全て検索してみましたが、出てきませんでした。 やはりこれはファイルが作られなかったと言うことでしょうね。 ますます原因がわからなくなってきました。

関連するQ&A

  • ファイルの入出力をするプログラム

    1週間前からJAVAを勉強しております。 簡単な練習で、テキストファイル(test.txt)に縦一列に並んでいる数字を読み込み別のテキストファイルに書き込むプログラムを作っておりますが FileInputStream file = new FileInputStream("test.txt"); file.read(buf_byte); for(i=0;i<=10;i++)buf_char[i]=(char)buf_byte[i]; という感じで恐らく回りくどいことをしてると思いますが、ダイレクトに文字を読み込む方法がわかりません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Return で文字列が返せない、、

    このような関数を作って、mainの関数に渡したいのですが、文法がダメだとコンパイラに怒られます。 private String test(){ try{ FileOutputStream fos=openFileOutput("sample.txt", MODE_PRIVATE); String text="サンプルテキストです"; fos.write(text.getBytes()); fos.close(); }catch(FileNotFoundException e){ }catch(IOException e){ } try{ FileInputStream fis=openFileInput("sample.txt"); byte buffer[]=new byte[100]; fis.read(buffer); String str = new String(buffer).trim(); fis.close(); return str; }catch(FileNotFoundException e){ }catch(IOException e){ } }なぜ返せないのでしょうか。

    • ベストアンサー
    • Java
  • 固定長データのbyteスキップについて

    バイナリ入出力でご質問がございます。 下記の例のように各レコードにある 先頭5byte付与されたデータを スキップ(破棄)して 各レコード10byteずつ読み込みたいのですが なにかサンプルデータもしくは アドバイス頂けないでしょうか? どうぞよろしくお願い致します。 例 1レコード 10byte (先頭5byte付与) LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 ↓ 1234567890 1234567890 1234567890 1234567890 1234567890 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.io.ByteArrayOutputStream; public class dat{ public static void main(String[] args) { String inputFileName = ""; String outputFileName = ""; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); File outputFile = new File(outputFileName); try { FileInputStream fis = new FileInputStream(inputFile); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream(outputFile); BufferedOutputStream bos = new BufferedOutputStream(fos); byte[] buf = new byte[17]; int len = 0; while ((len = bis.read(buf, 0, 17)) == 17) { bos.write(buf, 0, 17); } bos.flush(); bos.close(); bis.close(); } catch(Exception e) { e.printStackTrace(); } }

    • ベストアンサー
    • Java
  • 固定長データの情報処理について

    現在情報処理についての勉強中ですが import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; public class dat_stream { public static void main(String[] args) { // 読み込むファイルの名前 String inputFileName = "ファイル名"; // 書き込むファイルの名前 String outputFileName = "ファイル名"; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); File outputFile = new File(outputFileName); try { // 入力ストリームの生成 FileInputStream fis = new FileInputStream(inputFile); BufferedInputStream bis = new BufferedInputStream(fis); // 出力ストリームの生成 FileOutputStream fos = new FileOutputStream(outputFile); BufferedOutputStream bos = new BufferedOutputStream(fos); // 読み込み用バイト配列 byte[] buf = new byte[9]; // ファイルへの読み書き int len = 0; while ( ( len = bis.read(buf) ) != -1 ) { bos.write(buf, 0, len); } // 後始末 bos.flush(); bos.close(); bis.close(); // エラーがあった場合は、スタックトレースを出力 } catch(Exception e) { e.printStackTrace(); } } } を使用してDATデータの入出力を考えています。 F0 F2 12 34 56 78 9C 00 50といった9byteの固定長データが あったとします。 (1)1byteから2byteはそのまま入出力 F0 F2 →F0 F2 (2)3byte~7byteパック10進数からアンパック(ゾーン)10進数に変換 12 34 56 78 9C →F1 F2 F3 F4 F5 F6 F7 F8 F9 こちらに関しては上位桁・下位桁で計算し正の数・負の数等も 考えなければいけないと思うのですが・・・ (3)バイナリ進数からゾーン10進数に変換 00 50→F0 F0 F8 F0 計算方法)0*16進数3剰 + 0*16進数2剰 + 5*16進数1剰+ 0 このような(1)~(3)のようなバイナリ入出力を考えた場合 1レコードが9byteで 10レコードで90byteだった場合の 書き出し方法について情報処理について詳しい方いましたら アドバイスください。 なお数値変換については今後勉強していければと思っております。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Java
  • Javaでよくわからないエラーが出てしまいます。

    こんにちは。 Javaでプログラムを作っている途中で ArrayIndexOutOfBoundsException というエラーが出てきました。 調べてみると"配列として確保された領域を 超えた場所アクセスした場合に発生"と書かれていました。 しかし、エラーの部分を見つけることができません。 以下に問題のプログラムを掲載します,問題点を指摘してもらいたいのです。 よろしくお願いします。 ちなみに開発環境はJava7です。 -------------以下プログラム------------- import java.io.*; public class Datain{ public static String[][] datain(){ String inputFileName; String indata_1; String[] indata_2 = new String[12]; String[][] mondata = new String[100][12]; int i = 0; //読み込むファイル名 inputFileName = "H:\\問題データ.txt"; //ファイルオブジェクトの生成 File inputFile = new File(inputFileName); try{ //入力ストリームの生成 FileInputStream fis = new FileInputStream(inputFile); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); //テキストファイルからの読み込み while((indata_1 = br.readLine()) != null){ indata_2 = indata_1.split(","); for(int z = 0;z < indata_2.length;z++){ mondata[i][z] = indata_2[z]; } i++; } br.close(); }catch(Exception e){ e.printStackTrace(); } return mondata; } public static void main(String[] args){ String[][] a; a = datain(); System.out.println(a[0][0]); } } -------------テキストファイル------------- あいう,えおか,きくけ こさし,すせそ,たちつ てとな,にぬね,のはひ ※カンマ区切りの「.txt」ファイル

    • ベストアンサー
    • Java
  • テキストファイルからの読み込みについて

    またまた困っております。 下記の様な場合はどうなるのでしょうか? class Test{ public Static void main(String[] args){   ・  ・ try{ 処理内容A    処理内容B 処理内容C    処理内容D  }catch{ メソッドの呼び出し }   ・   ・   ・ } ------------------------ class Error{ 処理内容Aのcatch定義    処理内容Bのcatch定義 処理内容Cのcatch定義    処理内容Dのcatch定義 } -------------------------- Error.txt 処理内容Aのエラーメッセージ 処理内容Bのエラーメッセージ 処理内容Cのエラーメッセージ 処理内容Dのエラーメッセージ ------------------------------ のように、Testクラス内の処理を別のクラスで行い(Testクラスではその処理のメソッドを呼び出す)、例外内容に付いてもErrorクラスで定義し、エラーの表示内容をError.txtの様な外部ファイルに格納しておいた時に、 Testクラス内で「処理内容B」でエラーが発生した場合、Errorクラスで対応したエラー(処理内容Bのcatch定義)処理を行うのですが、Error.txtから「処理内容Bのエラーメッセージ」を拾い出してくるにはどうしたらよいのですか? 長くなり分かり難いかもしれませんが、宜しくお願い致します。

    • ベストアンサー
    • Java
  • 起動した順に「1着です」「2着です」・・・と表示するプログラム

    どうにも分からなくなってきたのでぜひ教えてください。 ---[やりたいこと]------------- (1)私のお客さんの部署には30人の社員がいます。 (2)彼らは一人一台ずつ Windows XP の PCを持っています。つまり、部署内に PCが30台あります。 (3)それら30台のPCは、あるフォルダをネットワーク共有して X:ドライブとして接続しています。 (4)その X:ドライブ に、私が作ったプログラム:例えば Test.java, Test.class を置いてあるとします。 (5)各マシンで java Test というコマンドを(バッチファイルで)実行します。 このプログラムを早く起動した順に 「あなたは1着です」「あなたは2着です」・・・「あなたは30着です」 と表示するプログラムを作りたいと思っています。 要するに、社員全員でプログラムを起動した順を分かるようにしたいのです。 ------------------------------ 今、考えている方法は、 (i) 共有フォルダに number.txt というファイルを置き、 number.txtには、現在までに起動した数を記録する。(最初は 0 を書き込んでおく) (ii) プログラムが起動すると number.txt から数字を読み込み、その数字に1を足して number.txt に書き込む というものです。 しかし、 ほぼ同時にプログラムを起動した社員が複数人いたとき、 ●「PC 1 で読み込み、PC 2 で読み込み、PC 1 で書き込み、PC 2 で書き込み」といったことが起こる可能性があります。この場合、PC 1 とPC 2 で表示される番号が一緒になってしまいます。 また、 ●起動が同時だと、片方のPCではファイルの読み込みができないのでは?という心配があります。 どうするのが良いでしょうか? ちなみに、現在、作ってみたのは以下のようなプログラムです。 よろしくお願いします。 -------------------------- import java.io.*; public class Test {  public static void main(String[] args) {   try {    // FileInputStream, FileOutputStreamオブジェクトの生成    FileInputStream abc = new FileInputStream("number.txt");    FileOutputStream xyz = new FileOutputStream("number.txt");    // InputStreamReader, OutputStreamWriterオブジェクトの生成    InputStreamReader in =     new InputStreamReader(abc, "Shift_JIS");    OutputStreamWriter out =     new OutputStreamWriter(xyz, "Shift_JIS");    int number; //    number = in.read();    number += 1;    System.out.println("あなたは" + number + "着です")    out.write(number);    in.close();    out.close();   } catch(IOException e) {    ;   } }

  • テキストファイルから読み取り配列にあてはめソート

    宿題できなくてあせってます。 宿題の内容は、テキストファイル(textstrs.txt)の内容を読み取ってARRAYに入れて 以下がテキストファイルの中身 3 Jones, Chris C Ferguson, Tom J Pryor, Richard P 一番初めのナンバーをARRAYのスロット数となり、そのスロットに 以下の3人の名前をあてはめ、アルファベット順に並び替えしたものを コンソールとテキストファイル(strsdataout.txt)に書くというものです。 今の段階は、まず読んでそのままコンソールに出すところですが それさえうまくいきません。とほほ 誰かわかる方おしえていただけますか。 import java.util.Scanner; import java.io.*; public class StringProject5 { //#1 public static void main(String[] args) throws Exception { //#2 // Create a File instance java.io.File inputFile = new java.io.File("D:\\teststrs.txt"); java.io.File outputFile = new java.io.File("D:\\strdataout.txt"); // Create Scanner for the file Scanner input = new Scanner(inputFile); FileReader in = new FileReader(inputFile); java.io.PrintWriter out = new java.io.PrintWriter(outputFile); BufferedReader br = new BufferedReader(in); int size = input.nextInt(); String[] strarray = new String[size]; int x = 0; while (input.hasNext()){ // while String ln = input.nextLine(); strarray [x] = ln; x++; } // end of while for (int i = 0; i < strarray.length; i++){ // for loop System.out.println(strarray[i]); //writing array in console }// end off for loop } //#2 } //#1*/

  • C#テキストファイルから1バイト除去する

    数ギガのテキストファイルがあり、語尾の1バイト(EOF)を瞬時に除去したいと思います。 バイトで読んで1バイトのみ出力しないと言う方法が一番簡単ですが、時間がかかる上、巨大ファイルには向きません。 下記語尾を置換するソースを書きましたが、除去の方法がわかりません。初心者ですので、簡単にお願いします。 FileStream fs = new FileStream("test.txt", FileMode.Open); byte[] b = new byte[1]; fs.Seek(fs.Length - 1, SeekOrigin.Begin); fs.Write(b, 0, 1); fs.Close();

  • PHPでの別のサーバーのテキストファイルの読み込み

    PHPに詳しい方が居られたら教えてください。 $file="http://www.sample.com/test.txt" $fp=fopen($file,"r"); (処理) close($fp); というようにして、別のサイトにおいてあるファイルを 読み込みんで処理したい場合、 "test.txt"の内容を変えても、変更前の内容を読み込ん でしまいます。 パソコンにキャッシュされているファイルにアクセスして いると思うのですが、 "test.txt"の内容を変えたら、確実に変更後の内容を 読み込むようにする方法はありませんでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう