• ベストアンサー

ファイルをある決まりにそって分割したい

単純にファイルの0x000001B3~0x000001B7までを切り取り保存したいのですがなにかいい方法ありませんか? バイナリエディタでやるとキリがないのでソフトなどで自動で切り出してくれるソフトありましたら教えてください。

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

  • ベストアンサー
  • yama06
  • ベストアンサー率61% (101/164)
回答No.7

よく見たら4バイトですね。下記はビッグエンディアンです。 import java.io.*; class Test { public static void main(String[] args) { DataInputStream fis = null; try { fis = new DataInputStream(new FileInputStream(args[0])); int b = 0; int i = 0; DataOutputStream fos = null; while(true){ b = fis.readInt(); if(b == 0x000001B3){ i++; fos = new DataOutputStream(new FileOutputStream(args[1] + "." + i)); } if(fos != null){ fos.writeInt(b); } if(b == 0x000001B7){ fos.close(); fos = null; } } }catch(EOFException eof){ }catch(Exception e){ e.printStackTrace(); } } }

DVD2
質問者

お礼

回答ありがとうございます 無事切り取りが出来ました。 切り取ったファイルも正常です。 本当にありがとうございました。

その他の回答 (6)

  • yama06
  • ベストアンサー率61% (101/164)
回答No.6

一行抜けていました。 import java.io.*; class Test { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream(args[0]); int b = 0; int i = 0; FileOutputStream fos = null; while(-1 != (b = fis.read())){ if(b == 0x000001B3){ i++; fos = new FileOutputStream(args[1] + "." + i); } if(fos != null){ fos.write(b); } if(b == 0x000001B7){ fos.close(); fos = null; } } fis.close(); }catch(Exception e){ e.printStackTrace(); } } }

DVD2
質問者

お礼

回答ありがとうございます。 エラーは出てきませんが こんどはファイルが書き出されません・・・

  • yama06
  • ベストアンサー率61% (101/164)
回答No.5

> 大体300k~5Mほどのデータになるんです 私のところではきちんと5バイトだけ出力されます。 「大体300k~5Mほどのデータになるはず」ということであれば、 質問の文章に問題があります。その場合は下のようなコードの はずです。 import java.io.*; class Test { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream(args[0]); int b = 0; int i = 0; FileOutputStream fos = null; while(-1 != (b = fis.read())){ if(b == 0x000001B3){ fos = new FileOutputStream(args[1] + "." + i); } if(fos != null){ fos.write(b); } if(b == 0x000001B7){ fos.close(); fos = null; } } fis.close(); }catch(Exception e){ e.printStackTrace(); } } }

  • yama06
  • ベストアンサー率61% (101/164)
回答No.4

>ファイル名まで指定しないとだめなんでしょうか? 指定しないとだめです。 >と出力先に入力したら1kほどのファイルがでてきたんですが・・・ 出力の結果が正しいかどうかはバイナリエディタ等で確認してください。

DVD2
質問者

お礼

夜遅くに回答ありがとうございます。 確認したんですがちがいました 大体300k~5Mほどのデータになるんです(各ファイルによってサイズが違うみたいです・・・) >>ファイル名まで指定しないとだめなんでしょうか? >指定しないとだめです。 ファイル名まで指定ですか? ひとつのファイルに 0x000001B3~0x000001B7までのデータが複数あるので どうなるんでしょうか?

  • yama06
  • ベストアンサー率61% (101/164)
回答No.3

> アクセスが拒否されましたってなってますがどうやれば解除できるんでしょうか? 管理者権限のアカウントがないと、Cドライブ直下には書き込みできない のではないでしょうか。 出力先を権限のあるディレクトリに変更するか、管理者アカウントで C:\のパーミッションを変更するか、アカウントの種別を変更するなどの 設定が必要かと思われます。

DVD2
質問者

お礼

回答ありがとうございます。 アカウントは一つしか作っておらず 使用しているアカウントは「コンピュータの管理者」となっています。 C:\javaと言うフォルダへ書き込むようにしてるんですが ファイル名まで指定しないとだめなんでしょうか? ためしにC:\java\0 と出力先に入力したら1kほどのファイルがでてきたんですが・・・ あと不思議なことにフォルダが読み取り専用になってたんで 解除したらまた勝手に読み取り専用になってたんです・・・

  • yama06
  • ベストアンサー率61% (101/164)
回答No.2

参考URLの手順に従って 1.JDKのインストール 2.環境の設定 3.フォルダの作成とファイルの作成  下記のソースコードはTest.javaと名前を付けたファイルに保存 4.コンパイル 5.実行 してください。 下記のソースコードをTest.javaファイルに保存した場合、コンパイルは javac Test.java 実行する場合は java Test [切り出したいファイル] [保存先] です。

参考URL:
http://www.tohoho-web.com/java/start.htm
DVD2
質問者

お礼

回答ありがとうございます。 早速試してみましたが実行したらこんなエラーが・・・ C:\java>java Test C:\java\FILEDT04.BIN C:\java java.io.FileNotFoundException: C:\java (アクセスが拒否されました。) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:179) at java.io.FileOutputStream.<init>(FileOutputStream.java:70) at Test.main(Test.java:12) アクセスが拒否されましたってなってますがどうやれば解除できるんでしょうか? っと言うか拒否設定になんかした覚えないんですけどね・・・・ ちなみにJDKのバージョンは1.5.0_08です

  • yama06
  • ベストアンサー率61% (101/164)
回答No.1

切り出したいファイルが沢山あるということでしょうか? それでしたら、探してもキリがないと思いますからプログラムを 書いてしまった方が早いと思います。 例えばJavaなら、 import java.io.*; class Test { public static void main(String[] args) { try { RandomAccessFile file = new RandomAccessFile(args[0], "r"); file.seek(0x000001B3); byte[] buf = new byte[5]; file.readFully(buf); file.close(); FileOutputStream fos = new FileOutputStream(args[1]); fos.write(buf); fos.close(); }catch(Exception e){ e.printStackTrace(); } } } とか。

DVD2
質問者

お礼

回答ありがとうございます。 分割プログラムを作るんですか? プログラムを書いたことないんでよくわからないんです。 できれば書いてくれたプログラムの使い方など教えてください。

関連するQ&A

専門家に質問してみよう