潍坊做网站公司潍坊网络公司,专业的微网站哪家好,教育网站建设网站,soho在哪里做网站今天被ftp上中文名修改坑了好久项目用的是 apache commons 里的 FtpClient 实现的对ftp文件的上传下载操作#xff0c;今天增加了业务要修改ftp上的文件名#xff0c;然后就一直的报错#xff0c;问题是它修改名字的方法只返回一个boolean#xff0c;没有异常#xff0c;这…今天被ftp上中文名修改坑了好久项目用的是 apache commons 里的 FtpClient 实现的对ftp文件的上传下载操作今天增加了业务要修改ftp上的文件名然后就一直的报错问题是它修改名字的方法只返回一个boolean没有异常这就很蛋疼了找了好久才发现是中文的名字的原因改名直接上代码package net.codejava.ftp;import java.io.IOException;import org.apache.commons.net.ftp.FTPClient;public class FTPRenamer {public static void main(String[] args) {String server www.ftpserver.com;int port 21;String user username;String pass password;FTPClient ftpClient new FTPClient();try {ftpClient.connect(server, port);ftpClient.login(user, pass);// renaming directoryString oldDir /photo;String newDir /photo_2012;boolean success ftpClient.rename(oldDir, newDir);if (success) {System.out.println(oldDir was successfully renamed to: newDir);} else {System.out.println(Failed to rename: oldDir);}// renaming fileString oldFile /work/error.png;String newFile /work/screenshot.png;success ftpClient.rename(oldFile, newFile);if (success) {System.out.println(oldFile was successfully renamed to: newFile);} else {System.out.println(Failed to rename: oldFile);}ftpClient.logout();ftpClient.disconnect();} catch (IOException ex) {ex.printStackTrace();} finally {if (ftpClient.isConnected()) {try {ftpClient.logout();ftpClient.disconnect();} catch (IOException ex) {ex.printStackTrace();}}}}}如果修改的名字里没有中文用上面的代码就够了但如果有中文就要对文件名进行转码了转码代码如下// renaming fileString oldFile /work/你好.png;String newFile /work/世界.png;success ftpClient.rename(new String(oldFile.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1),new String(newFile.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));这样再修改名字就没有问题了顺便记录一下上传、下载、删除、检查文件是否存在 同样的如果有中文名最好先转一下码再进行操作上传import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import org.apache.commons.net.ftp.FTP;import org.apache.commons.net.ftp.FTPClient;/*** A program that demonstrates how to upload files from local computer* to a remote FTP server using Apache Commons Net API.* author www.codejava.net*/public class FTPUploadFileDemo {public static void main(String[] args) {String server www.myserver.com;int port 21;String user user;String pass pass;FTPClient ftpClient new FTPClient();try {ftpClient.connect(server, port);ftpClient.login(user, pass);ftpClient.enterLocalPassiveMode();ftpClient.setFileType(FTP.BINARY_FILE_TYPE);// APPROACH #1: uploads first file using an InputStreamFile firstLocalFile new File(D:/Test/Projects.zip);String firstRemoteFile Projects.zip;InputStream inputStream new FileInputStream(firstLocalFile);System.out.println(Start uploading first file);boolean done ftpClient.storeFile(firstRemoteFile, inputStream);inputStream.close();if (done) {System.out.println(The first file is uploaded successfully.);}// APPROACH #2: uploads second file using an OutputStreamFile secondLocalFile new File(E:/Test/Report.doc);String secondRemoteFile test/Report.doc;inputStream new FileInputStream(secondLocalFile);System.out.println(Start uploading second file);OutputStream outputStream ftpClient.storeFileStream(secondRemoteFile);byte[] bytesIn new byte[4096];int read 0;while ((read inputStream.read(bytesIn)) ! -1) {outputStream.write(bytesIn, 0, read);}inputStream.close();outputStream.close();boolean completed ftpClient.completePendingCommand();if (completed) {System.out.println(The second file is uploaded successfully.);}} catch (IOException ex) {System.out.println(Error: ex.getMessage());ex.printStackTrace();} finally {try {if (ftpClient.isConnected()) {ftpClient.logout();ftpClient.disconnect();}} catch (IOException ex) {ex.printStackTrace();}}}}下载import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import org.apache.commons.net.ftp.FTP;import org.apache.commons.net.ftp.FTPClient;/*** A program demonstrates how to upload files from local computer to a remote* FTP server using Apache Commons Net API.* author www.codejava.net*/public class FTPDownloadFileDemo {public static void main(String[] args) {String server www.myserver.com;int port 21;String user user;String pass pass;FTPClient ftpClient new FTPClient();try {ftpClient.connect(server, port);ftpClient.login(user, pass);ftpClient.enterLocalPassiveMode();ftpClient.setFileType(FTP.BINARY_FILE_TYPE);// APPROACH #1: using retrieveFile(String, OutputStream)String remoteFile1 /test/video.mp4;File downloadFile1 new File(D:/Downloads/video.mp4);OutputStream outputStream1 new BufferedOutputStream(new FileOutputStream(downloadFile1));boolean success ftpClient.retrieveFile(remoteFile1, outputStream1);outputStream1.close();if (success) {System.out.println(File #1 has been downloaded successfully.);}// APPROACH #2: using InputStream retrieveFileStream(String)String remoteFile2 /test/song.mp3;File downloadFile2 new File(D:/Downloads/song.mp3);OutputStream outputStream2 new BufferedOutputStream(new FileOutputStream(downloadFile2));InputStream inputStream ftpClient.retrieveFileStream(remoteFile2);byte[] bytesArray new byte[4096];int bytesRead -1;while ((bytesRead inputStream.read(bytesArray)) ! -1) {outputStream2.write(bytesArray, 0, bytesRead);}success ftpClient.completePendingCommand();if (success) {System.out.println(File #2 has been downloaded successfully.);}outputStream2.close();inputStream.close();} catch (IOException ex) {System.out.println(Error: ex.getMessage());ex.printStackTrace();} finally {try {if (ftpClient.isConnected()) {ftpClient.logout();ftpClient.disconnect();}} catch (IOException ex) {ex.printStackTrace();}}}}删除import java.io.IOException;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPReply;public class FTPDeleteFileDemo {public static void main(String[] args) {String server www.myserver.com;int port 21;String user user;String pass pass;FTPClient ftpClient new FTPClient();try {ftpClient.connect(server, port);int replyCode ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(replyCode)) {System.out.println(Connect failed);return;}boolean success ftpClient.login(user, pass);if (!success) {System.out.println(Could not login to the server);return;}String fileToDelete /repository/video/cool.mp4;boolean deleted ftpClient.deleteFile(fileToDelete);if (deleted) {System.out.println(The file was deleted successfully.);} else {System.out.println(Could not delete the file, it may not exist.);}} catch (IOException ex) {System.out.println(Oh no, there was an error: ex.getMessage());ex.printStackTrace();} finally {// logs out and disconnects from servertry {if (ftpClient.isConnected()) {ftpClient.logout();ftpClient.disconnect();}} catch (IOException ex) {ex.printStackTrace();}}}}检查文件/文件夹是否存在package net.codejava.ftp;import java.io.IOException;import java.io.InputStream;import java.net.SocketException;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPReply;/*** This program demonstrates how to determine existence of a specific* file/directory on a remote FTP server.* author www.codejava.net**/public class FTPCheckFileExists {private FTPClient ftpClient;private int returnCode;/*** Determines whether a directory exists or not* param dirPath* return true if exists, false otherwise* throws IOException thrown if any I/O error occurred.*/boolean checkDirectoryExists(String dirPath) throws IOException {ftpClient.changeWorkingDirectory(dirPath);returnCode ftpClient.getReplyCode();if (returnCode 550) {return false;}return true;}/*** Determines whether a file exists or not* param filePath* return true if exists, false otherwise* throws IOException thrown if any I/O error occurred.*/boolean checkFileExists(String filePath) throws IOException {InputStream inputStream ftpClient.retrieveFileStream(filePath);returnCode ftpClient.getReplyCode();if (inputStream null || returnCode 550) {return false;}return true;}/*** Connects to a remote FTP server*/void connect(String hostname, int port, String username, String password)throws SocketException, IOException {ftpClient new FTPClient();ftpClient.connect(hostname, port);returnCode ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(returnCode)) {throw new IOException(Could not connect);}boolean loggedIn ftpClient.login(username, password);if (!loggedIn) {throw new IOException(Could not login);}System.out.println(Connected and logged in.);}/*** Logs out and disconnects from the server*/void logout() throws IOException {if (ftpClient ! null ftpClient.isConnected()) {ftpClient.logout();ftpClient.disconnect();System.out.println(Logged out);}}/*** Runs this program*/public static void main(String[] args) {String hostname www.yourserver.com;int port 21;String username your_user;String password your_password;String dirPath Photo;String filePath Music.mp4;FTPCheckFileExists ftpApp new FTPCheckFileExists();try {ftpApp.connect(hostname, port, username, password);boolean exist ftpApp.checkDirectoryExists(dirPath);System.out.println(Is directory dirPath exists? exist);exist ftpApp.checkFileExists(filePath);System.out.println(Is file filePath exists? exist);} catch (IOException ex) {ex.printStackTrace();} finally {try {ftpApp.logout();} catch (IOException ex) {ex.printStackTrace();}}}}参考总结以上所述是小编给大家介绍的java使用apache commons连接ftp修改ftp文件名失败原因,希望对大家有所帮助如果大家有任何疑问请给我留言小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持如果你觉得本文对你有帮助欢迎转载烦请注明出处谢谢