在我的程序中,我在文檔中使用了an example改編的JSch軟件包,它描述瞭如何將文件從遠程服務器複製到本地計算機。雖然該程序似乎可以正常工作,但在複製過程中文件似乎已損壞,並且當我嘗試從bash播放它們時,出現一個錯誤消息:「播放失敗格式:無法打開輸入文件79_97_729.wav」 :WAVE:找不到RIFF標題「。如何在java中將wav文件從一個目錄複製到另一個目錄?
我的複製方法如下:
public void copyFile(File file, String newName) throws JSchException, IOException{
String prefix = null;
if (new File(destination).isDirectory()){
prefix = destination + File.separator;
}
JSch jsch = new JSch();
Session session = jsch.getSession("username", "network");
session.setUserInfo(new MyUserInfo());
session.connect();
String command = "scp -f " + file.getAbsolutePath();
Channel channel = session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
OutputStream out = channel.getOutputStream();
InputStream in = channel.getInputStream();
channel.connect();
byte[] buf = new byte[1024];
// send '\0'
buf[0]=0; out.write(buf, 0, 1); out.flush();
while(true){
int c=checkAck(in);
if(c!='C'){
break;
}
// read '0644 '
in.read(buf, 0, 5);
long filesize=0L;
while(true){
if(in.read(buf, 0, 1)<0){
// error
break;
}
if(buf[0]==' ')break;
filesize=filesize*10L+(long)(buf[0]-'0');
}
// send '\0'
buf[0]=0; out.write(buf, 0, 1); out.flush();
// read a content of lfile
fos=new FileOutputStream(prefix == null ? destination : prefix + newName);
int foo;
while(true){
if(buf.length<filesize) foo=buf.length;
else foo=(int)filesize;
foo=in.read(buf, 0, foo);
if(foo<0){
// error
break;
}
fos.write(buf, 0, foo);
filesize-=foo;
if(filesize==0L) break;
}
fos.close();
fos=null;
// send '\0'
buf[0]=0; out.write(buf, 0, 1); out.flush();
}
session.disconnect();
}
是否有某種適應我可以做控制的事實,我複製文件以WAV格式?任何幫助,將不勝感激!
你只是在同一臺機器上從一個目錄複製到另一個目錄?或者這是通過網絡傳輸的? – Lucas 2012-07-26 20:00:48
@盧卡斯,在我看來,這是通過網絡傳輸。看起來你正在通過做所有這些瘋狂的東西來破壞文件。爲什麼不使用[this](http://www.java2s.com/Code/Java/File-Input-Output/copyCompletelyInputStreaminputOutputStreamoutput.htm) – 2012-07-26 20:05:08
與原始文件相比,結果文件的大小是多少? – jtahlborn 2012-07-26 20:10:43