みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Javaが途中で止まってしまいます

Javaで音声ファイルを変換するスクリプトなのですが、音声ファイル自体は認識して「ファイルコピー終了」と出るのですが、実際にはコピーされておらず、そこで終わってしまい変換工程まで辿り着かない状態です。
==============================
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


public class OnseiFileConvert {

/**
* @param args
*/
public static void main(String[] args) {

OnseiFileConvert exe = new OnseiFileConvert();
exe.execute();
}
/**
m = 0x80;
for( i=0; i<fsize; i++, m++ ) {
if( m == 0xFF ) {
m = 0x80;
}
fread( &t, 1, 1, fp );
t = t^m;
fwrite( &t, 1, 1, fp_out );
}

*/
public void execute(){

String voice_dir_in = "C:\\java\\onsei";
String voice_dir_out = "C:\\output\\onsei";

try {
convVoice(voice_dir_in,voice_dir_out);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 音声変換処理
* @throws IOException
* @throws InterruptedException
*/
private void convVoice(String voice_dir_in,String voice_dir_out) throws IOException, InterruptedException{
System.out.println("ディレクトリーコピー開始");
System.out.println("xcopy /T /E \"" + voice_dir_in + "\" \"" + voice_dir_out +"\"");
Process proc = Runtime.getRuntime().exec( "xcopy /T \"" + voice_dir_in + "\" \"" + voice_dir_out +"\"");
proc.waitFor();
proc.destroy();
System.out.println("ディレクトリーコピー終了");
System.out.println("ファイルコピー開始");
convData(voice_dir_in, voice_dir_out);
System.out.println("ファイルコピー終了");
}

/**
* @param voice_dir_in
* @param voice_dir_out
* @throws IOException
* @throws InterruptedException
*/
private void convData(String voice_dir_in, String voice_dir_out)
throws IOException, InterruptedException {

System.out.println(voice_dir_in + "/" + voice_dir_out);

File in_file = new File(voice_dir_in);
File[] in_files_list = in_file.listFiles();
for(int i = 0; i < in_files_list.length ; i++ ){
File chFile = in_files_list[i];
if(chFile.isDirectory()){
convData(voice_dir_in + "\\" + chFile.getName() ,voice_dir_out + "\\" + chFile.getName() );
} else {
String file_name = chFile.getName();
System.out.println(file_name);
if(".".equals(file_name.substring(0, 1))){
file_name = file_name.substring(1, file_name.length()-4);
File ofile = new File(voice_dir_out + "\\" + file_name);
if( ofile.length() == 0 ){
convFile(voice_dir_in + "\\" + chFile.getName(),voice_dir_out + "\\" + file_name);
}
}
}
}
}
/**
* ファイル単位に変換を実施する処理
*/
private void convFile(String input_file_name,String out_file_name) {
//convert
FileInputStream fip = null;
FileOutputStream fop = null;
try {
System.out.println("変換開始");
fip = new FileInputStream(input_file_name);
fop = new FileOutputStream(out_file_name);
long fsize = (new File(input_file_name)).length();
int m = 0x80;
for( int i=0; i< fsize; i++, m++ ) {
if( m == 0xFF ) {
m = 0x80;
}
int t = fip.read();
t = t^m;
fop.write(t);
}
System.out.println("変換完了" + fsize + "Byte");

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(fip != null){
fip.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(fop != null){
fop.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}
==============================

長時間悩んで書き直したりしたのですが、やはり結果が変わらずお手上げ状態です。
どうぞご助力お願いします。

投稿日時 - 2013-10-20 15:24:10

QNo.8313361

困ってます

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

convData()からconvFile()を呼ぶ条件は合っていますか?
file_nameが"."で始まるファイルの場合だけconvFile()を呼んでいるようです。

if(".".equals(file_name.substring(0, 1))){

投稿日時 - 2013-10-20 22:23:10

お礼

回答ありがとうございました。
ご指摘通り書き換えたら無事動作いたしました。
満足のいく結果が得られ大変助かりました。
この場を借りてお礼申し上げます。

投稿日時 - 2013-10-21 02:21:55

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問