ftp服务器断点上传下载(二)

2014-11-24 08:14:42 · 作者: · 浏览: 5
中与要上传的文件夹中同名的文件将被替换 * * @param fileName * 要上传的文件(或文件夹)名 * @param newName * 服务器段要生成的文件(或文件夹)名 * @return */ public boolean upload(String fileName, String newName) { try { String savefilename = new String(fileName.getBytes("GBK"), "GBK"); File file_in = new File(savefilename);// 打开本地待长传的文件 if (!file_in.exists()) { throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!"); } if (file_in.isDirectory()) { upload(file_in.getPath(), newName, ftpClient.pwd()); } else { uploadFile(file_in.getPath(), newName); } if (is != null) { is.close(); } if (os != null) { os.close(); } return true; } catch (Exception e) { e.printStackTrace(); System.err.println("Exception e in Ftp upload(): " + e.toString()); return false; } finally { try { if (is != null) { is.close(); } if (os != null) { os.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * 真正用于上传的方法 * * @param fileName * @param newName * @param path * @throws Exception */ private void upload(String fileName, String newName, String path) throws Exception { String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK"); File file_in = new File(savefilename);// 打开本地待长传的文件 if (!file_in.exists()) { throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!"); } if (file_in.isDirectory()) { if (!isDirExist(newName)) { createDir(newName); } ftpClient.cd(newName); File sourceFile[] = file_in.listFiles(); for (int i = 0; i < sourceFile.length; i++) { if (!sourceFile[i].exists()) { continue; } if (sourceFile[i].isDirectory()) { this.upload(sourceFile[i].getPath(), sourceFile[i] .getName(), path + "/" + newName); } else { this.uploadFile(sourceFile[i].getPath(), sourceFile[i] .getName()); } } } else { uploadFile(file_in.getPath(), newName); } ftpClient.cd(path); } /** * upload 上传文件 * * @param filename * 要上传的文件名 * @param newname * 上传后的新文件名 * @return -1 文件不存在 >
=0 成功上传,返回文件的大小 * @throws Exception */ public long uploadFile(String filename, String newname) throws Exception { long result = 0; TelnetOutputStream os = null; FileInputStream is = null; try { java.io.File file_in = new java.io.File(filename); if (!file_in.exists()) return -1; os = ftpClient.put(newname); result = file_in.length(); is = new FileInputStream(file_in); byte[] bytes = new byte[1024]; int c; while ((c = is.read(bytes)) != -1) { os.write(bytes, 0, c); } } finally { if (is != null) { is.close(); } if (os != null) { os.close(); } } return result; } /** * 从ftp下载文件到本地 * * @param filename * 服务器上的文件名 * @param newfilename * 本地生成的文件名 * @return * @throws Exception */ public long downloadFile(String filename, String newfilename) { long result = 0; TelnetInputStream is = null; FileOutputStream os = null; try { is = ftpClient.get(filename); java.io.File outfile = new java.io.File(newfilename); os = new FileOutputStream(outfile); byte[] bytes = new byte[1024]; int c; while ((c = is.read(bytes)) != -1) { os.write(bytes, 0, c); result = result + c; } } catch (IOException e) { e.printStackTrace(); } finally { try { if (is != null) { is.close(); } if (os != null) { os.close(); } } catch (IOException e) { e.printStackTrace(); } } return result; } /** * 取得相对于当前连接目录的某个目录下所有文件列表 * * @param path * @return */ public List getFileList(String path) { List list = new ArrayList(); DataInputStream dis; try { dis = new DataInputStream(ftpClient.nameList(this.path + path)); String filename = ""; while ((filename = dis.readLine()) != null) { list.add(filename); } } catch (IOException e) { e.printStackTrace(); } return list; } public static void main(String[] args) throws NativeException, IllegalAccessException { FtpUtil f