Java从FTP下载xls文件,能下载成功,但是无法打开

这是我的代码

     FtpClient ftpClient = null;  

    OutputStream os = null;  

    FileInputStream is = null;  
    public void connectServer(String ip, int port, String username,String password, String path){
        try{/*连接服务器的两种方法*/
            ftpClient = FtpClient.create();
            try{
                SocketAddress addr = new InetSocketAddress(ip,port);
                ftpClient.connect(addr);
                ftpClient.login(username, password.toCharArray());
                System.out.println("登陆成功!");
                if(path.length() != 0){
                    //吧远程系统上的目录切换到参数path所指定的目录
                    ftpClient.changeDirectory(path);// throws FtpProtocolException, IOException
                }
            }catch(FtpProtocolException e){
                //TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println(0000000);
            }
        }catch(IOException ex){
            ex.printStackTrace();
            throw new RuntimeException(ex);
        }
    }

    public void download(String remoteFile,String localFile){
        InputStream is = null;
        FileOutputStream fos = null;
        System.out.println(111111111);
        try{
            ftpClient = FtpClient.create();

            //获取远程机器上的文件filename,借助TelnetInputStream
            try{
                is = ftpClient.getFileStream(remoteFile);
            }catch(FtpProtocolException e){
                //TODO Auto-generated catch block
                e.printStackTrace();
            }
            //File file_in = new File(localFile);

            fos = new FileOutputStream(localFile);//localFile 为内存输出流的输出对象
            byte[] bytes = new byte[204800];
            int c;
            while((c = is.read(bytes)) != -1){
                fos.write(bytes, 0, c);
            }
            System.out.println("download success!");
        }catch(IOException ex){
            System.out.println("not download");
            ex.printStackTrace();
            throw new RuntimeException(ex);
        }finally{
            try{
                if(is != null){
                    is.close();
                }
            }catch(IOException e){
                e.printStackTrace();
            }finally{
                try{
                    if(fos != null){
                        fos.close();
                    }
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }
    }

文件能下载下来但是不能打开,如图,不管点是还是否,都不能出来数据图片说明

0

7个回答

下载是成功了,可是下载的文件数据有问题。
你可以用二进制比较工具(比如WinDiff或者UltraCpmparer)看下是文件不完整还是文件内容有问题。

1
nichilemaworld
nichilemaworld 这个有什么解决办法可以在代码层面上避免这个问题么
4 年多之前 回复

帖子有点早,近期也遇到同样的问题,解决方式:ftp.login() 后 设置数据传输类型为二进制 ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
默认ascii,而对于ascii形式的数据,对于行结束符和回车之类的编码win(\r\n)和linux(\n)有区别

1

说明服务器写出去出错了。

0
nichilemaworld
nichilemaworld 能指出具体的代码位置和解决办法么?麻烦您了,我是新手,懂得太少了。还有,网上有人说是编码问题,您觉得是么??
4 年多之前 回复

无法打开提示什么错误?你是用什么软件打开的

0
nichilemaworld
nichilemaworld 您点下上面的全部展开,就有提示错误的截图,就用的微软的office打开的
4 年多之前 回复
0
nichilemaworld
nichilemaworld 我这个点是之后都不会提示这篇文章里的提示框,excel界面除了工具栏都是空白
4 年多之前 回复
0
nichilemaworld
nichilemaworld 我这和前端没任何关系啊 ,就是个简单的从FTP下载文件的小程序
4 年多之前 回复
nichilemaworld
nichilemaworld 我这和前端没任何关系啊 ,就是个简单的从FTP下载文件的小程序
4 年多之前 回复

byte[] bytes = new byte[204800];//你把这里的大小改小点试试吧。。。FTP协议本身并不是很优美的协议,自身就是有缺陷的。。。你可以下个md5工具,对源文件和下载后的文件做比对,看文件是否是在下载过程中出的问题。如果比对一致,基本可以判断为服务端原文件就有问题。。。可以用ftp工具去连接ftp服务下载文件试试,看能打开不。。。。

从代码上,你的代码没有什么问题。

0
nichilemaworld
nichilemaworld 回复lowanty: 您看第一个connectServer方法
4 年多之前 回复
lowanty
modii 回复nichilemaworld: public void download(String remoteFile,String localFile),第一个try后面。 不知道是不是看花眼了。你这里FtpClient.create()后,好像没有执行conn和login
4 年多之前 回复
nichilemaworld
nichilemaworld 我就是在window资源管理器里输入ftp地址然后复制粘贴下了的,就饿能打开,比对的时候我也是用这个和用Java下载下来的进行比对的
4 年多之前 回复
lowanty
modii 回复nichilemaworld: 如果值都不一样的话,那就是服务器文件和本地文件不一样了。你试着用一个第三方的ftp工具,如windows的,连接服务,下载下这个文件试试。
4 年多之前 回复
nichilemaworld
nichilemaworld 回复lowanty: 我用MD5比对工具比对了一下,MD5、SHA1、CRC32这三个值都不一样
4 年多之前 回复
nichilemaworld
nichilemaworld 回复lowanty: 应该不可能,我试着下载了很多个都这样
4 年多之前 回复
lowanty
modii 回复nichilemaworld: ftp服务器上是否有程序正在使用这个xls文件,例如用office查看着或者在编辑中。
4 年多之前 回复
nichilemaworld
nichilemaworld 我刚开始写的是new byte[1024]也不行,昨天我用这个从FTP下载csv文件都没问题
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java下载ftp服务器端文件直接打开
毕业后的第一份工作, 到手的第一个任务是 从ftp服务器端下载文件,并直接调用系统默认程序打开 直接贴上Controller代码 @RequestMapping("/downloadZj") @ResponseBody public Map downloadZj(long sn, short xh) throws SocketException, IOException {
xls文件的上传和下载
xls文件上传:  .xml格式的文件,上传导入时不能用PIO来读取xml数据,只能用dom4j来解析。用PIO来导入会报一下异常: 异常一: Unable to read entire header; 0 bytes read; expected 512 bytes 解决办法:更新pio的包从3.5—final到3.15 异常二: org.apache.poi.poifs.f
Jboss下载xls文件直接打开
<mime-mapping>                     <extension>xls</extension>                     <mime-type>application/octet-stream</mime-type>     </mime-mapping>   web.xml保存以...
无法打开下载chm文件
本人用的操作系统window server 2003 Enterprise Edition Service Pack 2,下载vbird.chm,竟然不能打开 不能打开,可这样恢复文件关联: 开始运行,输入:regsvr32 C:\windows\system32\hhctrl.ocx ,确定,重新关联文件。  ...
jsp从服务器下载xls文件到客户端
NULL 博文链接:https://yuanyuan7891.iteye.com/blog/723483
java下载ftp文件.txt
通过java代码来实现下载ftp服务器文件
【原创】常见FTP无法下载的解决办法(匿名能下载) - for proftpd
能解决的是 使用 proftpd 提供 ftp服务,别人无法下载文件的常见问题   安装与启动proftpd 切换到root (su - root)  yum install proftpd  或 yum install -y proftpd 【yum -y install与yum install有什么不同 https://blog.csdn.net/aiynmimi/article...
FTP下载 FTP下载 FTP下载
FTP下载FTP下载FTP下载FTP下载FTP下载FTP下载FTP下载FTP下载
java生成和下载xls文件问题
我的这个问题主要是实时生成xls文件然后下载到客户端,但目前由于数据过多,所以需要的n反映时间挺长,这样就会出现504 Gateway Time-out The server didn't respond in time.n这个问题。请问大神,我该如何解决这个问题?
【无法下载】,【只能打开】
我做了一个上传页面,上传后,当我点击上传文件名时,如果文件格式是无法读取的,还可以调出下载对话框,如果文件格式是能够试别的,如.doc,.txt,.xls就干脆直接打开了,而我现在还想把它们下载到本地机器上,就无法实现了,而且页面是禁止使用右键的,请问大家如果你们遇到这种情况,如何让一些word等文件下载下来呢???(可以再做个下载按钮)这样就实现了既可以下载又可以查看了,而不是单一的打开?
springMVC实现.xls文件的下载
@RequestMapping(value="excel.do", produces="application/vnd.ms-excel") @ResponseBody public byte[] excel( HttpServletResponse response) throws IOException{ response.setHeader( "Content-Dispos
从服务器下载FTP文件出现问题
[color=#FF0000]问题如下:[/color]rnSystem.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote hostrn at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)rn at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)rn --- End of inner exception stack trace ---rn at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)rn at System.Net.FtpDataStream.Read(Byte[] buffer, Int32 offset, Int32 size)rn at System.IO.StreamReader.ReadBuffer()rn at System.IO.StreamReader.ReadLine()rnrn[color=#FF0000]各位大虾,这会不会是服务器内存不足导致呢?[/color]代码如下rnrnrnpublic void FTPFile()rn rn int i = 0;rn int k = 0;rn string temp_strServer = "ftp://××××";rn string temp_remoteFile = "XXX.tab";rn string temp_userID = "×××";rn string temp_passWord = "×××";rn Uri temp_URI = new Uri(temp_strServer + temp_remoteFile);rn string temp_localFilePath = Application.StartupPath + "/temp/";rnrn tryrn rn currentTime = DateTime.Now;rn WriteLog("---begin FTP---" + currentTime);rnrn FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create(temp_URI);rn ftpReq.Method = WebRequestMethods.Ftp.DownloadFile;rn ftpReq.UseBinary = true;rn ftpReq.Credentials = new NetworkCredential(temp_userID, temp_passWord);rn FtpWebResponse ftpResp = (FtpWebResponse)ftpReq.GetResponse();rn StreamReader ftpRespStream = new StreamReader(ftpResp.GetResponseStream());rn // Stream ftpRespStream = ftpResp.GetResponseStream();rnrn string line = ftpRespStream.ReadLine();rn while (line != null)rn rn FileInfo myfileinfo = new FileInfo(temp_localFilePath + "XXX_" + i.ToString() + ".tab");rn if (!myfileinfo.Exists)rn rn FileStream fs = myfileinfo.Create();rn fs.Close();rn rn StreamWriter mysw = myfileinfo.AppendText();rn mysw.WriteLine(line);rn mysw.Close(); // have to be closedrnrn k = k + 1;rn if (k > 20000)rn rn k = 0;rn myfileinfo.MoveTo(temp_localFilePath + "XXX_" + i.ToString() + "_2.tab");rn currentTime = DateTime.Now;rn WriteLog("---complete one file---file No.: " + i + "----- at :" + currentTime);rn i = i + 1;rn rnrn line = ftpRespStream.ReadLine();rn //if (i == 2 && k == 100) // for testrn //rn // line = null;rn //rn rn FileInfo myfileinfo2 = new FileInfo(temp_localFilePath + "XXX_" + i.ToString() + ".tab");rn if (myfileinfo2.Exists)rn rn myfileinfo2.MoveTo(temp_localFilePath + "XXX_" + i.ToString() + "_2.tab");rn rn ftpResp.Close();rn g_completeFTP = true;rn currentTime = DateTime.Now;rn WriteLog("---complete all FTP files------------file No.: " + i + "---------- at :" + currentTime);rn rn catch (Exception e)rn rn WriteLog(e.ToString());rn g_completeFTP = true;rn rn
为什么从FTP下载的文件是0KB的?
如题,我需要从FTP服务器中下载一个XML文件,文件中是有数据的,但文件下载下来以后,没有任何数据
从FTP下载的ini文件得不到更新。
Option ExplicitrnrnPrivate Declare Function URLDownloadToFile Lib "urlmon" _rn Alias "URLDownloadToFileA" _rn (ByVal pCaller As Long, _rn ByVal szURL As String, _rn ByVal szFileName As String, _rn ByVal dwReserved As Long, _rn ByVal lpfnCB As Long) As Longrn rnPrivate Const ERROR_SUCCESS As Long = 0rnPrivate Const BINDF_GETNEWESTVERSION As Long = &H10rnPrivate Const INTERNET_FLAG_RELOAD As Long = &H80000000rnrnPublic Function DownloadFile(sSourceUrl As String, _rn sLocalFile As String) As Booleanrn rn DownloadFile = URLDownloadToFile(0&, _rn sSourceUrl, _rn sLocalFile, _rn BINDF_GETNEWESTVERSION, _rn 0&) = ERROR_SUCCESSrn rnEnd FunctionrnrnPrivate Sub Command1_Click()rn Dim sSourceUrl As Stringrn Dim sLocalFile As Stringrnrn rn sSourceUrl = "ftp://118.123.8.122/bte.ini"rn sLocalFile = "d:\bte.ini"rn rn rn If DownloadFile(sSourceUrl, sLocalFile) Thenrn rn MsgBox "下载成功"rn End IfrnrnrnEnd Subrnrnrn‘------------------rn用以上代码从服务器下载了 bte.ini 到本地硬盘后发现,每次下载的文件内容都是一样的,没有得到更新,实际情况,ini是一直在更新,请问为什么有这种情况?rn
FTP下载自动更新文件
FTP模式下载文件更新,只要配置下载路径、用户名和密码多线程下载文件,根据文件大小支持断点下载文件。更新完成后自动打开运行的exe文件(需要配置)
下载ftp文件
asp.net怎么通过一个FTP地址,下载该地址的文件。注意,不想通过下载工具。我用window.open(地址)后,会弹出迅雷来下载,但是,我如果不装迅雷,结果就成空白页了,有没有办法,让他用系统的来下载rnrn急,在线等,工作时间要到了,要交任务啊。刚来三天。帮帮忙@!
ftp 下载exe文件
从ftp下载 exe文件必须得用二进制模式下载,设置:request.UseBinary = true;下载如果用streamreader接的话,exe文件不可用,并且部分文件会变大,但是文本文件正常。rn如果用BinaryReader 接数据,代码如下rn[code=C#]//获得文件的内容rn private void getFileContent(string str1)rn rn FtpWebRequest request = (FtpWebRequest)WebRequest.Create(@"ftp://192.168.0.1/测试/" + projectName + str1);rn rn request.KeepAlive = false;rnrn request.Method = WebRequestMethods.Ftp.DownloadFile;rnrn request.Credentials = new NetworkCredential("anonymous", "");rnrn //注意: 多次调用 GetResponse 会返回相同的响应对象;该请求不会重新发出。rn request.EnableSsl = false;rn request.UseBinary = true;rn FtpWebResponse response = (FtpWebResponse)request.GetResponse();rn Stream responseStream = response.GetResponseStream();rn FileStream fw = new FileStream(@"C:\Documents and Settings\Administrator\桌面\dufei\阿瓦提client"+str1,FileMode.Create);rn BinaryReader reader = new BinaryReader(responseStream);rn BinaryWriter bw = new BinaryWriter(fw);rn byte fileContext;rn reader.BaseStream.Seek(0, SeekOrigin.Begin);rn bw.BaseStream.Seek(0, SeekOrigin.End);rnrn while (reader.BaseStream.Position < reader.BaseStream.Length)rn rn fileContext = reader.ReadByte(); //按照字节读取文件rn bw.Write(fileContext); //写入文件rn rn rn reader.Close();rnrn response.Close();rn rnrnrnrn[/code]rn reader.BaseStream.Seek(0, SeekOrigin.Begin);处rn会报 “此流不支持查找操作“的异常rn Stream responseStream = response.GetResponseStream();responseStream 的length也会报Length = “responseStream.Length”引发了“System.NotSupportedException”类型的异常。rn
android下载FTP的文件
android下载FTP的文件,支持Windows FTP站点。
ftp下载多个文件
备忘: ftp下载多个文件命令 [code=&quot;dos&quot;]&gt;mget[/code] 不过这样写会每个文件都询问是否下载,很烦。 这里加入prompt,就没有了。 [code=&quot;dos&quot;]&gt;prompt[/code] [code=&quot;dos&quot;]&gt;mget *[/code]...
ftp下载 文件
对于ftp下载文件 如果服务器地址不是本地,而是在虚拟机上或者在某个服务器上, 在传路径想new 一个File时候 ,绝对不能用java.io.File类的,因为它只能new 路径 是本地电脑上的 这时候需要用org.apache.commons.net.ftp.FTPFile类 来new 想要下载的文件。!!! 其次就是 如果服务器是linux系统 ,它和windows是不一样的,需要加上
cmd下载ftp文件
通过命令下载ftp文件步骤: 1.cmd 进入dos命令 2.输入ftp,切换到ftp下 3.open ip 打开要访问的ftp资源 4.输入用户名,密码 5.pwd 打印当前路径,cd 切换到资源路径 6.dir 显示路径下所有文件 7.lcd 路径,文件要下载到本地位置 8.mget 文件名,下载文件 9.bye 退出ftp操作步骤如图: ps:电脑上没有图片工具,做的有
ftp下载指定文件
1、想做个自动更新。需要从服务器下载需要更新的文件来替换本地的文件。rn2、看网上使用HttpWebRequest和HttpWebResponse可是他们好像下载的是网页,我无法控制我要下载的文件。rn3、还有两个进度条,一个是当前文件下载进度。一个是总进度。rn4、我想用webClient来实现。暂时不想用多线程和异步,因为还不会使用。就用最简单的最原始的方法先实现功能就行。rn5、高手请告诉我如何控制需要下载的文件,还有如何替换本地文件???rn[url=http://blog.csdn.net/kevonz/archive/2009/12/25/5078432.aspx][/url]此贴看过,没有实现,不知道为什么。
如何下载FTP文件?
以前老是以为这样可以下载FTP文件,试验了一下,小点的倒可以,大了就不行,最多32KB rnrn
ftp文件上下载
提供ftp方式下的服务器和客户端实现文件传输和数据通信
下载FTP文件的帮助类
下载FTP文件的帮助类,DownloadFTPFile可以节省不少设置FTP特性的代码
浏览器下载ftp文件
1,浏览器下载ftp文件 一般下载ftp文件都使用ftp客户端工具,这样能更好的保证下载的速度和安全,也可以使用我的电脑,在地址栏输入ftp下载地址实现下载功能,只是相对工具来说这种方法不能操作较大的文件,可能会中断超时,一般建议使用工具。 当今随着web的发展,很多网站都需要在浏览器中直接提供ftp文件下载。大多数浏览器也在不同程度上支持ftp协议,可以通过ftp://usernam...
ftp文件打包下载
要用java 从ftp上下载文件夹到本地。rn需要先压缩文件夹下载到本地。。。。rnrn我用的是org.apache.commons.net.ftprn压缩也知道怎么压缩。只是不知道怎么压缩服务器上的文件。。。请指点
FTP文件的下载问题
一直想写一个从客户端连接至FTP服务器下载某文件的程序.现在输出文件内容可以了,但是实现下载...受困了:(rn 我的思路是将该FTP上欲下载的文件长度读出,再写到本地磁盘.rnimport java.net.*;rnimport java.io.*;rnclass ftp_exrn public static void main(String[] args)rn tryrn byte[] data=new byte[1024];rn URL url=new URL("ftp://aaa:aaa123@192.168.31.27/a/b.txt");rn InputStream urlc=url.openStream();rn URLConnection uc=url.openConnection();rn int contentLength=uc.getContentLength();rn System.out.println("contentLength="+contentLength);rn String filename=url.getFile();rn filename=filename.substring(filename.lastIndexOf('/'));rn System.out.println("文件名="+filename);rn FileOutputStream fout=new FileOutputStream(filename);rn rn fout.write(data);rn fout.flush();rn fout.close();rn rn urlc.close();rn rn catch(Exception e)rn System.err.println("err!");rn rn rnrn 本想采用这种类似从网页上下载文件的方法来获取FTP文件的长度的方法,但这里contentLength的值输出却为-1,导致后面的write(data)不知道该怎么来实现了:(rn 两点请求帮助:1是如何获取FTP文件的长度?2是如果我的思路有错,应采用何种思路来正确获取FTP服务器上的某文件?rnrn
.iso无法下载,但是RAR文件却可以下载
win2003 IIS是哪里设置的啊
文件成功上传后,成功下载,但是不能用了!!!!!!!!
我把一个MP3文件拖到UNIX服务器上,然后上传到它的ORACLE数据库里,用的BLOBrn怎么下载到本地(WINDOWS)以后就不能播放了?????上传前是可以的!!!!!!!!rn播放时(WINAMP)报:NO MPEG HEADER FOUNDrnrnrnrn马上给分!
java操作ftp下载
java通过ftp远程下载文件,已经自己使用,稳定,实现了文件夹递归下载。
java 编写ftp下载
下载必须要定义好文件名,如何改为下载的时候,弹出“打开”、“保存”、“取消”的对话框,怎么改呢?请教高手指教。rn 这是我写的:rn ftpClient = new FtpClient();rn ftpClient.openServer(server); rn ftpClient.login(user, password); rn ftpClient.binary();rn TelnetInputStream is=ftpClient.get(filename);rn rn File file_out=new File("d:/1.doc");//输出文件名,要改为自定义,怎么改呢? rn FileOutputStream os=new FileOutputStream(file_out);rn byte[] bytes=new byte[1024];rn int c;rn while ((c=is.read(bytes))!=-1) rn os.write(bytes,0,c);rn rn is.close();rn os.close();rn ftpClient.closeServer();rn
JAVA实现FTP下载
使用配置连接ORACLE数据库,根据传入参数(请求号)获取在服务器文件地址,进行FTP下载文件
java FTP 下载
一个关于Java FTP下载的多线程软件,根据配置文件去下载,对电脑的配置要求高
GPRS无法下载FTP内容!!!!!
我用WM5的手机通过ACTIVESYNC ,usb口与电脑同步的时候,程序可以正常下载FTP中的内容,,rn但是拔去USB连接线,在手机上开通GPRS业务(通过IE打开一个网页,图标显示了"G"),然后再运行程序下载的时候出现错误,可以确定的是手机通过GPRS确实连接到FTP服务器上了的,就是下载的时候出现错误,12002rn什么原因?
java ftp下载
java ftp文件下载。要注意传送模式(此例子是被动模式)
高效的java ftp下载
public static boolean uploadToFtp(String url,int port,String username,String passwd, String path,String fileName,InputStream inputStream) throws IOException{ boolean flag=false; FTPClient ftp=new F
java ftp 下载操作
从ftp服务器下载文件 FTP服务器端口 FTP登陆账号 登陆密码 FTP服务器上的相对路径 要下载的文件名 下载后保存到本地的路劲
java FTP 下载器
纯java开发的可以用了下载各种文件,类似FTP公具
java ftp的上传和下载
免费发给大家使用,能够上传文件到ftp服务器,和从ftp服务器下载文件。.