`
bnmnba
  • 浏览: 288089 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

linux wget命令下发FTP时,包含中文路径提示文件不存在,无法下载文件解决方法

 
阅读更多

 

文件不存在的原因是因为编码不同,服务器认为请求地址的文件不存在。

解决方法是使用服务可以理解的方式对路径进行编码(我的ftp服务器使用的是gb2312),例如使用java先把中文路径转换为英文再调用wget进行下载:

package c;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

public class FTPGb2312 {

	public static void main(String[] args) {
		BufferedReader read2=null;
		BufferedReader read1=null;
		try {
			System.out.println("[info]:args[0]"+args[0]);
			args[0]=getPath(args[0]);
			System.out.println("[info]:args[0]"+args[0]);
			System.out.println("[info]:args[1]"+args[1]);
			Runtime r = Runtime.getRuntime();
			Process p=r.exec("wget --restrict-file-names=nocontrol ftp://10.231.155.209"+args[0]+" -O "+args[1]);
			read1 = new BufferedReader(new InputStreamReader(p.getInputStream(),"UTF-8"));
			String s=null;
			while((s=read1.readLine())!=null){
				System.out.println("[info]:"+s);
			}
			
			read2 = new BufferedReader(new InputStreamReader(p.getErrorStream(),"UTF-8"));
			
			while((s=read2.readLine())!=null){
				System.out.println("[info]:"+s);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try{
			if(read1!=null){
				read1.close();
			}
			}catch(Exception e){}
			try{
			if(read2!=null){
				read2.close();
			}
			}catch(Exception e){}
		}
		
	}

	private static String getPath(String str) throws UnsupportedEncodingException {
		String[] strs=str.split("/");
		List<String> l=new ArrayList<String>();
		StringBuffer sb=new StringBuffer();
		sb.append("/");
		for (int i = 0; i < strs.length; i++) {
			if(strs[i]!=null&&!strs[i].equals("")){
				l.add(URLEncoder.encode(strs[i], "gb2312"));
			}
		}
		for (String s:l){
			sb.append("/");
			sb.append(s);
		}
		return sb.toString();
	}
}

 使用

java  -jar c.FTPGb2312 ftp路径 目标文件路径

代替 wget  ftp路径 -O 目标文件路径

即可实现正常下载

 

分享到:
评论

相关推荐

    支持中文目录wget版本,linux版本

    wget下载地址:https://ftp.gnu.org/gnu/wget/ 在wget的源代码中 src/url.c 这个文件中有wget如何处理文件名的函数url_file_name() url_file_name()在根据url的形式判断该保存为什么样的文件名,并进行了多方面的...

    wget命令用法

    wget 非常稳定 它在带宽很窄的情况下和不稳定网络中有很强的适应性 如果是由于网络的原因下载失败 wget命令会不断的尝试 直到整个文件下载完毕 如果是服务器打断下载过程 它会再次联到服务器上从停止的地方继续下载 ...

    windows 使用wget 下载命令

    下载资源&gt;把wget64.exe放置到C:\Windows\System32路径下&gt;cmd 输入 wget64 下载链接地址

    详解Linux中的wget命令

    wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会...

    linux 离线安装wget

    linux 离线安装wget

    每天一个linux命令(61):wget命令详解

    Linux系统中的wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的...

    windows版wget命令

    windows版wget命令 使用帮助wget --help Startup: -V, --version display the version of Wget and exit. -b, --background go to background after startup. -e, --execute=COMMAND execute a `.wgetrc' ...

    解决wget无法使用的方法

    解决wget无法使用的方法解决wget无法使用的方法解决wget无法使用的方法解决wget无法使用的方法解决wget无法使用的方法解决wget无法使用的方法解决wget无法使用的方法解决wget无法使用的方法

    文件下载工具wget.zip

    wget是Linux中的一个下载文件的工具, wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上。 它用在命令行下。 对于Linux用户是必不可少的工具, 尤其对于网络...

    linux命令行模式使用wget下载JDK

    linux命令行模式使用wget下载JDK 版本 jdk-8u60-linux-x64.tar.gz

    linux wget 命令用法详解(附实例说明).docx

    linux wget 命令用法详解(附实例说明).docx

    wget命令rpm安装

    wget命令rpm安装文件,需要预先安装rpm,才可以配置。

    Linux 中wget命令详细介绍

    一个linux命令:wget ftp访问命令来下载文件的三种方式 1)wget ftp://userName:password@172.17.5.73:21/xxxx/xxx.txt 2) wget –ftp-user=XXX –ftp-password=xx ftp://172.17.5.73:21/xxx.txt wget:从网络上自动...

    cfssl.zip包含cfssl相关文件,解决国内无法下载或者下载慢的问题

    wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 ...本压缩包是通过上面三个命令下载的文件,主要是为了解决在国内下载慢或者下载失败的问题。

    Linux的wget命令详解

    Linux wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器。如果我们使用虚拟主机,处理这样的事务我们只能先...

    windows下wget命令

    windows下wget命令,文件路径添加到系统path里即可在cmd命令下执行。

    wget命令 文件下载

    wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会...

    解决wget无法使用

    解决wget无法使用

    wget--强大的linux 下载工具

    强大的linux 下载工具,支持断点续传,整站下载.

Global site tag (gtag.js) - Google Analytics