1. 程式人生 > >解決FTP伺服器上中文名檔案下載後為空的問題

解決FTP伺服器上中文名檔案下載後為空的問題

有臺伺服器,編碼為GBK,發現伺服器上的中文檔案下載後文件大小為0,開啟為空白。

經調查,是檔名編碼格式不對導致,對於中文情況,使用FTPClient時編碼格式需使用ISO-8859-1

具體程式碼:
package com.neusoft.ftptest;

import java.io.File;
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;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class FtpMain {

	public static void main(String[] args) {
		FTPClient client = new FTPClient();
		try {
			client.connect("10.10.xxx.xxx", 21);
			client.login("administrator", "xxx");
			System.out.println(client.getControlEncoding());
			int reply = client.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				client.disconnect();
				System.out.println("Login error");
				return;
			}
			client.setControlEncoding("GBK");
			// client.segt

			System.out.println(client.getCharsetName());
			// client.enterRemotePassiveMode();
			client.enterLocalPassiveMode();
			client.changeWorkingDirectory("11_COMMUNICATION/201204");

			System.out.println("---------------------------------------");

			String[] names;

			names = client.listNames();
			for (int i = 0; i < names.length; i++) {
				System.out.println(names[i]);
			}
			System.out.println(names.toString());

			System.out.println("---------------------------------------");

			FTPFile f = client.listFiles()[0];
			System.out.println(f.getLink());
			client.changeWorkingDirectory("/");
			String path = "/10_NOTICE_FILE/201706";
			// String path = "/10_NOTICE_FILE/201203/";

			client.setBufferSize(1024);
			client.setFileType(FTP.BINARY_FILE_TYPE);
			client.enterLocalPassiveMode();
			client.changeWorkingDirectory(path);

			FTPFile[] fs = client.listFiles();
			FileOutputStream out = null;
			InputStream in = null;
			for (int i = 0; i < fs.length; i++) {
				FTPFile ff = fs[i];
				String outFileName = ff.getName();
				System.out.println(outFileName);

				//本地目錄檔案不需要編碼
				File localFile = new File("D:\\ftp\\" + ff.getName());
				OutputStream fos = new FileOutputStream(localFile);
				// ftp需使用ISO-8859-1編碼格式
				String localFileName = new String(ff.getName().getBytes("GBK"), "ISO-8859-1"
); client.retrieveFile(localFileName, fos); fos.close(); } } catch (Exception e) { e.printStackTrace(); } finally{ try { client.disconnect(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

相關推薦

解決FTP伺服器中文名檔案下載的問題

有臺伺服器,編碼為GBK,發現伺服器上的中文檔案下載後文件大小為0,開啟為空白。 經調查,是檔名編碼格式不對導致,對於中文情況,使用FTPClient時編碼格式需使用ISO-8859-1 具體程式碼:package com.neusoft.ftptest; import

Java實現FTP伺服器傳、下載下載多個寫入本地、刪除

場景:需要從FTP伺服器一個檔案目錄下down下來所有的檔案,上傳到專案某個目錄下。 上傳下載刪除獲取檔案下所有檔案,順便加上獲取到所有檔案進行下載。 package a1; /** * 1----public boolean uploadFile(String path ,Fi

PHP將伺服器檔案下載(例如下載Excel模板)

   //下載模板(前提:此檔案在伺服器上)     public function down()     {         header("Content-type:text/html;charset=utf-8");         $file_name="example.xls";         

java 從ftp伺服器 讀取檔案內容

 public class FtpUtil {       FtpClient ftpClient;       /**      * 連線FTP服務      * @param url //IP地址      * @param port//埠號      * @par

用命令的方式向ftp伺服器檔案

先假設有一FTP伺服器,FTP伺服器:qint.ithot.net,使用者名稱:username 密碼:user1234。在本地電腦D:盤建立一個資料夾"qint"。將要上傳的檔案複製到d:\qin

解決2003伺服器檔案的限制

奇怪了,編輯器中預設大小100K我是改了的,並且在本地測試上傳大於100K的圖片是通過了的,再說如果是圖片超大,應該會提示超過大小,怎麼會出現這樣的情況呢?不管了,先還是檢查一下程式吧,於是我檢查了一下程式,沒有看出任何問題,又在本地傳此圖測試了一下,也沒有出現也上問題,上傳是成功了的。我這下又繼續尋找其他原

ubuntu搭建FTP伺服器 檔案

ftp伺服器的搭建 進入root模式下: 1、檢視是否有vsftp vsftp -version 若有,顯示版本 2、若無,安裝 sudo apt-get install vsftp 3、新建一個資料夾,作為FTP的工作目錄 mk

easyPoi處理檔案下載檔名問題----請求頭資訊

導包:同上一篇匯出封裝請求引數 定義註解: import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import java.lang.annotation.*; /** * 匯出Excel註解. */ @Document

c#如何在FTP伺服器下載資料夾及子資料夾中的檔案

c#從FTP伺服器上下載資料夾及子資料夾中的檔案需要三個步驟。 1.單個檔案的下載 /*adss表示存放到本地的路徑名,ftpadss表示從FTP伺服器下載的路徑名*/ public void downLoad(string adss, string ftpadss)   &n

shell指令碼-從ftp伺服器下載多個zip檔案並解壓

zip格式檔案用unzip filename解壓 get 下載單個檔案 mget 下載多個檔案 #!/bin/sh FTP_IP=192.168.25.100 #FTP伺服器地址 F

java+jsp程式碼實現從FTP伺服器下載檔案

首先宣告一下。jsp從ftp伺服器上面下載檔案,有兩種方法1.直接給出檔案的地址 2.將檔案作為位元組流返回給瀏覽器 一 、先說第一種吧(這種發放很簡單)。 1.直接使用一個超連結:<a href='ftp://FTP使用者名稱:密碼@IP地址:埠號+ 後面是路徑 (

在Linux平臺上的Ftp伺服器通過命令列下載檔案

本文中,介紹在 Linux shell 中如何使用 ftp 命令。包括如何連線 FTP 伺服器,上傳或下載檔案以及建立資料夾。儘管現在有許多不錯的 FTP 桌面應用,但是在伺服器、SSH、遠端會話中命令列 ftp 命令還是有很多應用的。比如。需要伺服器從 ftp

jquery-form中ajaxSubmit提交檔案,以及解決ie9下檔案自動下載問題

1、之前的專案一直使用formData的方式上傳檔案到後臺處理,但新專案要求支援ie9,ie9不能有效支援formData,只能使用ajaxSubmit的方式上傳檔案前臺程式碼 <form id="upload-file" method="post" enctyp

java遠端操作ftp伺服器下載

 注意裡面的檔案編碼,連線過程編碼與伺服器編碼不一致的話會導致上傳中文亂碼情況。 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.Inpu

oracle 自動匯出package/package body/procedure 等sql檔案並且自動傳到ftp伺服器

有的時候對於研發或者其他非DBA的人員來說是沒有許可權登陸到資料庫上的,但有的時候研發需要除錯一些儲存過程或者包等,又常常需要登陸到伺服器上去檢視,那麼再這種情況下,可以通過dba_source或者all_source 將需要的procedure 、pakckage、body等匯出成文字形式並且

解決Linux中文名檔案下載找不到路徑(java.io.FileNotFoundException: ***(No such file or directory))

問題描述 以前寫過一個檔案上傳下載的專案,在本地測試沒有問題,但最近在部署到Linux伺服器實際應用發現,當檔名為中文時,會報java.io.FileNotFoundException: ***(No

通過http請求tomcat服務直接下載linux伺服器檔案

如圖所示,在linux伺服器上有如圖一些檔案,現在想通過http訪問tomcat的請求方式來獲取這些檔案 步驟: 1、找到伺服器上tomcat的server.xml的檔案,新增一句: <Context docBase ="/usr/local/download/" path ="/

通過SecureCRT下載遠端Linux伺服器檔案到本地Windows

①  sz  檔名【先cd到需要下載的檔案的目錄層】 [[email protected] bookinterface]# sz test.txt    rz   Starting zmodem transfer.  Press Ctrl+C to can

如何在命令列中使用 ftp 命令傳和下載檔案

本文中,介紹在 Linux shell 中如何使用 ftp 命令。包括如何連線 FTP 伺服器,上傳或下載檔案以及建立資料夾。儘管現在有許多不錯的 FTP 桌面應用,但是在伺服器、SSH、遠端會話中命令列 ftp 命令還是有很多應用的。比如。需要伺服器從 ftp 倉庫拉取

js 下載伺服器檔案

今天用js下載伺服器上的檔案txt時,檔案總是被開啟,而不是下載。 解決方法: 直接下載txt檔案是實現不了的,將txt檔案壓縮成rar格式,這樣再去下載就沒有問題了。(這也是為什麼很多下載的檔案都