salsberry の回答履歴
- 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の設定はいじらない方法でファイルのデータを、 指定バイトから指定バイトまで読み込む方法等なないでしょうか? それ以外でも処理が早く、 大容量のテキストファイルを読み込む方法がありましたら、 そちらでも問題ありません。 ぜひとも知恵をお貸しください。 宜しくお願いします。
- Eclipseでのデバック
Java 6.29、Eclipse 3.6を使用しています。 Eclipseで作成したJavaコードをステップ実行してデバックしていくと最終行の右中括弧直前の 右中括弧でThread.classコードに入り、デバックが終了してしまいます。 回避策をご存知でしたら教えいただけませんか?
- ベストアンサー
- Java
- noname#187796
- 回答数5
- Eclipseでのデバック
Java 6.29、Eclipse 3.6を使用しています。 Eclipseで作成したJavaコードをステップ実行してデバックしていくと最終行の右中括弧直前の 右中括弧でThread.classコードに入り、デバックが終了してしまいます。 回避策をご存知でしたら教えいただけませんか?
- ベストアンサー
- Java
- noname#187796
- 回答数5
- Javaのインタフェースについて教えてください!
interface Area{ String str = "計算結果は"; String str2 = "です。"; } class VArea implements Area{ int vertical, horizon; VArea(int a, int b){ vertical = a; horizon = b; } System.out.print(str);//1 public void getArea(){ System.out.println(vertical * horizon); }; System.out.print(str2);//2 } public class Main{ public static void main(Stirng[] args){ VArea va = new VArea(10,3); } } Javaのインタフェースを実装してコンソールに >計算結果は30です。 というように出力したいのですが、”計算結果”と”です。”と出力する方法が見出せません。 わかる方教えてください。 エラーの出ている箇所は1と2です。
- ベストアンサー
- Java
- wiredrikou
- 回答数2
- ArrayListに多次元配列
ArrayListに多次元配列の変数を格納したのですが、取り出し方がわからず困っています。 ----------------------------------------------- String[][] str = {{"aaa","bbb","ccc","ddd","eee","fff"}, {"aaa","bbb","ccc","ddd","eee","fff"}, }}; ArrayList array = new ArrayList(); array.add(str[0]); array.add(str[1]); ----------------------------------------------- 上記の場合で、str[0][2];を取得する方法がわかりません。 java初心者なのでおかしな質問かもしれませんが、宜しくお願いします。
- ベストアンサー
- Java
- barusu0126
- 回答数1
- Eclipseでのデバック
Java 6.29、Eclipse 3.6を使用しています。 Eclipseで作成したJavaコードをステップ実行してデバックしていくと最終行の右中括弧直前の 右中括弧でThread.classコードに入り、デバックが終了してしまいます。 回避策をご存知でしたら教えいただけませんか?
- ベストアンサー
- Java
- noname#187796
- 回答数5
- ID3タグの情報を取得したいのですが・・・・
指定したディレクトリ以下にある複数のMP3ファイルからID3タグの情報(アーティスト・作成年・曲名)など表示するプログラムなのですが、実行すると”引数にディレクトリを指定して”と言う表示が返されてしまいます。このプログラムのどの個所にディレクトリを指定する記述をすれば指定したディレクトリ以下のMP3ファイルからID3タグの情報を表示させることができるか教えてください。(>_<) プログラムは大きく分けて [ID3TagのVer1.0/1.1取得するクラス] [ID3TagのVer2.3 取得するクラス] [ID3TagのVer1.0/1.1とVer2.3 取得クラスのスーパークラス] [指定ディレクトリ以下のファイル一覧を取得するクラス] [ID3TagのVer1.0/1.1とVer2.3 取得クラスを取得・保持するクラス] [ID3Tag取得プログラムするMainクラス] から構成されています。 <以下に示すのがMainクラスのプログラムです。> import java.io.File; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.ArrayList; public class MP3FileListMain { /** * @param args * @throws UnsupportedEncodingException */ public static void main(String[] args) throws UnsupportedEncodingException { if(args.length < 1) { System.out.print("引数にディレクトリを指定して\n"); return; } File objFile = new File(args[0]); if(!objFile.isDirectory()) { System.out.print("引数に指定したのは、ディレクトリではない\n"); System.out.print("引数にディレクトリを指定して\n"); return; } FileList objFileList = new FileList(objFile); long lRnt = objFileList.getFileInfo(); // System.out.print(lRnt); try { MP3Tag.init(); } catch (ClassNotFoundException e) { e.printStackTrace(); } MP3Tag.outputFiles(objFileList); } private static class MP3Tag { private static long lSeriesNo_ = 0; private static long lMaxSeriesNo_ = 0; private static long lFileNo_ = 0; private static long lMaxFileNo_ = 0; private static long lTypeNo_ = 0; private static SimpleDateFormat sdf_; private static int handle1_; private static int handle2s_; private static int handle21s_; private static int handle22s_; private static int handle2i_; private static int handle3s_; private static int handle3i_; private static int handle3u_; private static void init() throws ClassNotFoundException { sdf_ = new SimpleDateFormat("yyyyMMddHHmmss"); } private static void outputFiles(FileList objFileList) { int handle = 0; long lSeriesNo = lSeriesNo_; MP3File objMP3File; ArrayList objMP3List; // System.out.print(objFileList.getDir() + "\n"); Iterator iteMP3File = objFileList.getMP3FileIte(); while(iteMP3File.hasNext()) { objMP3File = (MP3File)iteMP3File.next(); try { objMP3List = objMP3File.getMP3Info(); } catch (Exception e) { e.printStackTrace(); return; } try { for(int i = 0; objMP3List.size() > i; i++) { System.out.print(lFileNo_ + ","); System.out.print(lTypeNo_ + ","); System.out.print(lSeriesNo + ","); MP3Info objMP3Info = (MP3Info)objMP3List.get(i); System.out.print(objMP3Info.getLastModified() + ","); System.out.print(objMP3Info.getFileSize() + ","); System.out.print(objMP3Info.getTagVersion() + ","); System.out.print(objMP3Info.getTrackNo() + ","); System.out.print(objMP3Info.getTitle() + ","); System.out.print(objMP3Info.getGenre() + ","); System.out.print(objMP3Info.getArtist() + ","); System.out.print(objMP3Info.getComment() + ","); System.out.print(objMP3Info.getYear() + ","); System.out.print(sdf_.format(new Date()) + ","); System.out.print(objMP3Info.getPath() + ","); System.out.print(objMP3Info.getFileName() + "\n"); } } catch (Exception e) { e.printStackTrace(); return; } lFileNo_++; } Iterator iteDir = objFileList.getDirIte(); while(iteDir.hasNext()) { outputFiles((FileList)iteDir.next()); } } } }
- ベストアンサー
- Java
- noname#149444
- 回答数1
- G95fortranのインストールで問題
今までg95fortranをPC1(windows7-64ビット、プロフェショナル、cpu:AMD PhenomX2)で使っていたのですが、マシンの調子が悪くなり、PC2にインストールしようとしています。pc2はcpuがAMDのfx4100でOSは同じです。MinGWを使います。 ところが今回のインストールは前回と同じ手順でやったつもりですが、 invalid instruction suffix for 'push' のエラーとなるのです。パスの関係は何度も試して確かめたつもりです。 ネットで調べると関連記事がたくさんあり32ビット/64ビットコードの関係が正しくないような感じですが解決策は読み取れませんでした。前回はOKだったので、新しいCPUブルドーザへの対応がg95では問題があるのかなと疑っています。その種のサイトは英文ばかりで、自在に投稿するわけにもいかず、こちらで何かご存知の方がいらっしゃるかと思いお聞きしました。
- ベストアンサー
- その他(プログラミング・開発)
- qhtsige
- 回答数1
- プログラムを実行させたいのですが・・・・・
複数のMP3ファイルからタグ情報を取り出すプログラムなのですがMainクラスを実行すると引数にディレクトリを指定してと表示されてしまいます。どの箇所の引数にディレクトリのパスを記述すれば取り出せるのかご教授お願い致します。直、プログラム大きく分けて6つあります。 <ID3V1Infoクラス> <ID3V2Infoクラス> <MP3FileクラスID3TagのVer1.0/1.1とVer2.3 取得クラスを取得・保持するクラス> <MP3InfoクラスID3TagのVer1.0/1.1とVer2.3 取得クラスのスーパークラス> <MP3FileListMainクラスMainクラス> <FileListクラス指定ディレクトリ以下のファイル一覧を取得するクラス>のプログラムは以下のようになります。 /** * ID3Tag取得プログラム:FileListクラス * 指定ディレクトリ以下のファイル一覧を取得するクラス */ import java.io.File; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Iterator; public class FileList { private ArrayList objMp3FileList = null; private ArrayList objDirList = null; private File objFile_; public FileList(File objFile) { objFile_ = objFile; } public long getFileInfo() throws UnsupportedEncodingException { if(objFile_ == null) { System.out.print("Argment is null.\n"); return -1; // error } String strCurrentPath = objFile_.toString(); if(!objFile_.isDirectory()) { System.out.print("This Path is not Directry. :" + strCurrentPath + "\n"); return -1; } objMp3FileList = new ArrayList(); objDirList = new ArrayList(); for(int i = 0; objFile_.listFiles().length > i; i++) { if(objFile_.listFiles()[i].isDirectory()) { FileList objFileList = new FileList(objFile_.listFiles()[i]); objFileList.getFileInfo(); objDirList.add(objFileList); } else if(objFile_.listFiles()[i].isFile()) { MP3File objMP3File = new MP3File(objFile_.listFiles()[i]); objMP3File.getMP3Info(); objMp3FileList.add(objMP3File); } } return 0; } public Iterator getMP3FileIte() { return objMp3FileList.iterator(); } public Iterator getDirIte() { return objDirList.iterator(); } public String getDir() { return objFile_.getPath(); } }
- ベストアンサー
- Java
- noname#149152
- 回答数2
- プログラムを実行させたいのですが・・・・・
複数のMP3ファイルからタグ情報を取り出すプログラムなのですがMainクラスを実行すると引数にディレクトリを指定してと表示されてしまいます。どの箇所の引数にディレクトリのパスを記述すれば取り出せるのかご教授お願い致します。直、プログラム大きく分けて6つあります。 <ID3V1Infoクラス> <ID3V2Infoクラス> <MP3FileクラスID3TagのVer1.0/1.1とVer2.3 取得クラスを取得・保持するクラス> <MP3InfoクラスID3TagのVer1.0/1.1とVer2.3 取得クラスのスーパークラス> <MP3FileListMainクラスMainクラス> <FileListクラス指定ディレクトリ以下のファイル一覧を取得するクラス>のプログラムは以下のようになります。 /** * ID3Tag取得プログラム:FileListクラス * 指定ディレクトリ以下のファイル一覧を取得するクラス */ import java.io.File; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Iterator; public class FileList { private ArrayList objMp3FileList = null; private ArrayList objDirList = null; private File objFile_; public FileList(File objFile) { objFile_ = objFile; } public long getFileInfo() throws UnsupportedEncodingException { if(objFile_ == null) { System.out.print("Argment is null.\n"); return -1; // error } String strCurrentPath = objFile_.toString(); if(!objFile_.isDirectory()) { System.out.print("This Path is not Directry. :" + strCurrentPath + "\n"); return -1; } objMp3FileList = new ArrayList(); objDirList = new ArrayList(); for(int i = 0; objFile_.listFiles().length > i; i++) { if(objFile_.listFiles()[i].isDirectory()) { FileList objFileList = new FileList(objFile_.listFiles()[i]); objFileList.getFileInfo(); objDirList.add(objFileList); } else if(objFile_.listFiles()[i].isFile()) { MP3File objMP3File = new MP3File(objFile_.listFiles()[i]); objMP3File.getMP3Info(); objMp3FileList.add(objMP3File); } } return 0; } public Iterator getMP3FileIte() { return objMp3FileList.iterator(); } public Iterator getDirIte() { return objDirList.iterator(); } public String getDir() { return objFile_.getPath(); } }
- ベストアンサー
- Java
- noname#149152
- 回答数2
- Javaでフォームの入力時に絵文字をはじきたい
Javaで入力フォームを作成しているのですが、 開発はUTF-8で行い、DBがEUCのため、iPhoneの絵文字を入力されると PSQLExceptionになってしまいます。 org.postgresql.util.PSQLException: ERROR: character 0xee9095 of encoding "UTF8" has no equivalent in "EUC_JP" アプリ側で絵文字があったらエラーを返すか、 DBに登録できるようにエスケープするかしたいのですが、 どのように実装すればよいでしょうか?
- 締切済み
- Java
- javavava01
- 回答数1
- Javaのガーベジコレクションについて
class Sample{ Sample sm; } class SampleMain{ public static void main(String[] args){ Sample sm1 = new Sample(); Sample sm2 = new Sample(); sm1.sm = sm2; sm2.sm = sm1; sm1 = null; sm2 = null; } } このプログラムでガーベジコレクションの対象(実行される可能性がある)は何行目になりますか?
- ベストアンサー
- Java
- wiredrikou
- 回答数2
- Javaのガーベジコレクションについて。
javaのガーベジコレクションの対象となるタイミングがわからないので教えて下さい。 class Sample{ Sample gc; } class SampleMain{ public static void main(String[] args){ Sample gc1 = new Sample(); Sample gc2 = new Saample(); gc1.gc = gc2; gc2.gc = gc1; gc1 = null; gc2 = null; } }
- ベストアンサー
- Java
- wiredrikou
- 回答数1
- 補数について質問
以下はJavaの参考書に掲載されている補数についての問題です。 疑問点にお答えいただけましたら幸いです。 次の10進数の補数を8桁の2進数で求めなさい A 15 B 0 C 1 質問1:Bについて、10進数の補数が0となっていますが、こんなのありえるんですか? 補数の定義は、「ある数 A に加えると、和の桁がひとつ上がる最小の数」ということなので、Bならある数がAが100でそれに加える数が0ということでしょうか? 質問2:質問1で記した定義に従い、補数15のある数Aとは85ですか? 質問3:「次の10進数の補数を8桁の2進数で求めなさい」という問題、そもそもどういう意図があるんですか?何故10進数の補数を8桁の2進数で求めさせるんですか? 質問4:この問題、10進数の補数を8桁の2進数に変換する問題かと思いきや、この10進数の補数を2進数に変換し、さらにその変換した2進数を補数にしたものが答えとなっています。 何故ですか?問題文おかしいような、、、 僕が読解を間違えたのでしょうか?
- utf-8のコードを使いたい
素人で大変申し訳ございません。 他の人が作ったPerlを改良しようと思っております。 仕様は、csvのカンマからカンマの間に入っている 文字を取得するというのですが、 英数字の場合は、正常に取得できるのですが、 半角ひらがなが入ると文字の取得ができません。 下記の$outputで、私が必要な情報を得ようと思っているのですが、 下記の右辺をどのように変えれば、半角ひらがなも取得できるでしょうか? $output =~ s|/\*\s(([A-Z0-9_])+)\s\*/|$D->{$1}|g; ※エンコードが必要でしたら、utf-8を使いたいと思っています。 一部分の大変失礼な質問と思いますが、何卒よろしくお願い致します。
- オークの友達 レコード越し
レコードで区切られている場合 縦に200行レコードがある時など レコード1の変数を消さないでレコード2にいくことはできるのでしょうか? 是非回答お願いします
- ベストアンサー
- その他(プログラミング・開発)
- pasona1
- 回答数1
- 変数を動的に利用するには?
Javaプログラミングの質問です。 下記のように変数を定義しておき、 String aaa_0 = "AAA1"; String aaa_1 = "AAA2"; 例えば、これらの変数の値を次のようにして使えますでしょうか? (できませんが、やりたいことは、なんとなく伝わったかと思います。) for(int i=0;i<2;i++){ System.out.println("aaa_" + i); } 変数を動的に呼び出せますでしょうか? アドバイスお願い致します。
- 締切済み
- Java
- MyNameIsBob
- 回答数5
- javaでの金額の丸めについて(至急、お願いします
調べ方が足りていないのかもしれませんが、 わかりませんでした。教えていただけないでしょうか。 金額の丸め処理をしたいのですが、どのように書けばいいのかわかりません。 金額は、もちろんマイナス表記もあります。 100円単位の切捨て、切上げ、四捨五入 1000円単位の切捨て、切上げ、四捨五入 少数以下の処理は、いろいろとサンプルがあったのですが・・・・ どなたかご教授願います。
- Perlの並列処理
私は今Perlの並列処理について学んでいます。3並列で子プロセスが行う処理はa1、a2、a3、・・・ak(処理にかかる時間a1<a2<a3<・・・)で、親プロセスはa1、a2、a3、・・・の結果を判定するというものです。 a1、a2、a3と順に判定していきたいと考えているのですが、どのようなプログラムを書けばよいでしょうか。なお、並列処理にはforkを利用するつもりです。 一度以下のようなプログラムを考えたのですが、これだとa1→a3→・・・→ak→親プロセス→a2→a4→・・・→a(k-1)→親プロセスとなってしまいます。よろしくお願いします。 while($count--){ #$countは並列数を入力 my $pid =fork; &child_process; exit; } wait; 【親プロセス】 sub child_process{ while($n<k){ $n=1; 【処理a$nを行う】 $n=$n+$count; } exit; }
- pageを開こうとすると出るerror msgへの
対応を教えてください。 エラーmsgは****下です。 なお、「はい」を押すと問題なく該当画面が表示されますが、 しょっちゅう開く画面で毎回出るので、 いちいち「はい」を押さねばならぬことは困るので尋ねます。 加えて、最後の行が意味不明なので説明してください。 **************************** javaが、セキュルティ問題の発生が考えられるアプリケーションコンポーネントを発見しました。 名前: AjanthaApplet 危険である可能性のあるコンポーネントは実行しないでください。(推奨) 詳細情報 [はい、いいえ] button __________________________________ アプリケーションに署名付きと署名無しとの両方のコードが含まれています。 アプリケーションのベンダーに問い合わせて、 アプリケーションが修正されていないことを確認してください。
- ベストアンサー
- Java
- noname#200115
- 回答数1