※ ChatGPTを利用し、要約された質問です(原文:Javaが途中で止まってしまいます)
Javaで音声ファイルを変換するスクリプトで途中で止まってしまう
この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();
}
}
}
}
==============================
長時間悩んで書き直したりしたのですが、やはり結果が変わらずお手上げ状態です。
どうぞご助力お願いします。
お礼
回答ありがとうございました。 ご指摘通り書き換えたら無事動作いたしました。 満足のいく結果が得られ大変助かりました。 この場を借りてお礼申し上げます。