本人正在做毕业设计,是用JAVA编写FTP客户端程序,期间遇到了以下问题难以解决,还请各位前辈指点迷精:
首先是客户端显示远端目录时中文名的显示是乱码,不知道如何是好.
第二,我是用Jtree控件来显示本地目录的,在下载文件的程序中要根据在Jtree里选中的本地目录来创建一个File实例,用到的方法是File(String pathname).问题在于pathname的格式要求用双斜线\\,即D:\\Programe Files\\abc这种形式,Jtree类中的getSelectionPath()方法得到的路径形式是[D:\,Programe Files,abc],请问如何编个方法来实现将这种目录形式转换成双斜线形式.(也就是下面程序中conPath()方法要实现的功能)(急!!!)
最后就是文件的下载问题了,从服务器下载的文件只有个文件名在那里,大小全都是
0KB,真是很郁闷,程序如下,还请各位前辈指教啊.(很急!!!)
void jButton4_actionPerformed(ActionEvent e) {
//下载ftp文件到本地目录
if(jTree1.isSelectionEmpty()){
//如果没有选择目录和文件提示用户
jTextArea1.append("没有选择本地目录用于下载!!\n");
}else{
File file1=new File(conPath());
if(file1.isFile()){
//如果是文件也要提示用户选择的是文件
jTextArea1.append("没有选择本地目录用于下 载"+jTree1.getSelectionPath().getLastPathComponent().toString()+"\n");
jTextArea1.append("而选择的是文件:"+conPath()+"\n");
}else{
//下载文件到指定的目录里
jTextArea1.append("选择的下载本地目录"+jTree1.getSelectionPath().getLastPathComponent().toString()+"\n");
jTextArea1.append("目录:"+conPath()+"\n");
//可以选择多个文件和目录
String [] filenames=list1.getSelectedItems();
for(int i=0;i<filenames.length;i++){
String filename=filenames[i];
boolean isfile=false;
try {
//判断是否为目录,如果是目录则在本地创建一个目录
ftp.cd(filename);
ftp.cdUp();
File localDir = new File(conPath()+"\\"+filename) ;
localDir.mkdir();
}
catch (IOException ex) {
isfile=true;
}
if(isfile){
//对文件的处理,即下载文件到本地硬盘中(但下载的文件大小都是0 KB,不知道问题出在哪里)
int ch;
try{
File localFile = new File(conPath()+"\\"+filename) ;
RandomAccessFile getFile = new RandomAccessFile((conPath()+"\\"+filename),"rw");
getFile.seek(0);
TelnetInputStream ins = ftp.get(filename);
DataInputStream Inputs = new DataInputStream(ins);
//下载处理......
while ((ch = Inputs.read()) >= 0) {
getFile.write(ch);
}
//处理完成,关闭输入输出流
ins.close();
getFile.close();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
}
}