FtpClient类问题

pcxx99 2005-11-11 10:30:51
偶在调用该类做上传的时候
ftpClient.cd(path);
怎么写这个path都不对,上传的文件只能传到根目录
这个路径该怎么写?
请写下实际例子

偶做的这个上传是从windows端向unix端传文件
但上传后的文件在unix端打开后每行都有^M
我调用了ftpClient.binary();的,怎么没起作用?
这么消除每行的这个 ^M
...全文
683 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
niko7 2005-11-26
  • 打赏
  • 举报
回复
如果是文本文件,就不要使用二进制方式,ftp服务器会自动转换其中的换行符号。
(也仅仅是部分服务器,而且要看是否设置启用了自动转换。)

一般而言,你用 BufferedReader 一行一行的读,每行后面加上目标服务器上的换行符。
当然,这样的话就用二进制方式传送了。
gemouzhi 2005-11-15
  • 打赏
  • 举报
回复
我不是给你写了?

你read一下,读出一个0到65535,遇到13,去了,然后写回去。

这样把文件整一下,在UNIX上是不可能出错的。emacs打开也绝对没问题。

当然,UNIX显示正常的文件,在WINDOWS 上会少那个CR也就是13。因为UNIX上只有10也就是LF。
pcxx99 2005-11-15
  • 打赏
  • 举报
回复
怎么处理上传下载文件每行最后的乱字符???请给出代码

上传到unix后文件内容t.txt:
ajljsjfs^M
neniefnie^M

下载后收到文件直接用文本方式打开t.txt,字符串将连成一行,并原换行符将变成一个黑点,用UltraEdit打开显示正常。
愚夫努力 2005-11-14
  • 打赏
  • 举报
回复
你登陆FTP服务器,用FTP命令字试试,CD 你的目录,看行不行,不行的话查FTP命令字,然后用sendserver再试。
pcxx99 2005-11-13
  • 打赏
  • 举报
回复
在登录unix环境后
是不是ftpClient.cd(path);中的path不能赋值写成
path = "/tmp/test";
gemouzhi 2005-11-11
  • 打赏
  • 举报
回复
你read一下,读出一个0到65535,遇到13,去了,然后写回去
pcxx99 2005-11-11
  • 打赏
  • 举报
回复
to gemouzhi
把CR去掉???
怎么做?
求代码
pcxx99 2005-11-11
  • 打赏
  • 举报
回复
比方说偶在unix环境下有用户mytest
那我做的这个上传下载就只能在/home/mytest/目录下执行
如果我想将文件放到/home/mytest/tmp目录下上传下载就都执行不了
gemouzhi 2005-11-11
  • 打赏
  • 举报
回复
也不是程序的问题,这是文件的问题,说白了是操作系统的异构而形成的
pcxx99 2005-11-11
  • 打赏
  • 举报
回复
public void upload(String infile)
{
int i = infile.lastIndexOf("\\");
String outfile = infile.substring(i+1, infile.length());
System.out.println("-------------------infile["+infile+"]");
System.out.println("-------------------outfile["+outfile+"]lastindex["+i+"]");
try {
TelnetOutputStream os=ftpClient.put(outfile);
File file_in=new File(infile);
FileInputStream is=new FileInputStream(file_in);
byte[] bytes=new byte[1024];
int c;
while ((c=is.read(bytes))!=-1){
os.write(bytes,0,c);
System.out.println("-------------------bytes["+bytes+"]");
}
is.close();
os.close();
}catch (IOException ex){
ex.printStackTrace();
}
}

public void load(String infile)
{
int ch;
// String infile = "t.txt";
int i = infile.lastIndexOf("/");
String outfile = infile.substring(i+1, infile.length());
outfile = "C:\\temp\\" + outfile;
System.out.println("-------------------infile["+infile+"]");
System.out.println("-------------------outfile["+outfile+"]lastindex["+i+"]");
try {
RandomAccessFile rFile = new RandomAccessFile(outfile,"rw");
rFile.seek(0);
TelnetInputStream tInput=ftpClient.get(infile);
DataInputStream dInput = new DataInputStream(tInput);
while ( (ch = dInput.read()) >= 0) {
rFile.write(ch);
}
dInput.close();
rFile.close();

}catch (IOException ex){
ex.printStackTrace();
}
}


这是偶写的上传和下载的代码。
请帮忙指出问题
gemouzhi 2005-11-11
  • 打赏
  • 举报
回复
这是一个很常见的问题,你需要在windows这边做处理
你是不是用emacs看的多^M也就是control M吧,你传的时候需要把CR去掉
和这个类似的问题还有Macintosh 这不是ftpClient的问题。

RFC 959(好象是这个啊,反正是一个FTP的RFC上说过) 已经说明了这个问题
farmer0512 2005-11-11
  • 打赏
  • 举报
回复
ftpClient的文件路径是相对路径还是绝对路径和Ftp Server的类型有关,我就遇到过wu-ftp是相对路径而vs-ftp是绝对路径的问题,所以你最好在put文件的时候不要用/xxx/xxx这种绝对路径的书写方式。还有ftp用户权限问题,linux下root不能作为ftp用户的所以通常用的用户不一定能够在你的目的路径下有写文件的权限,所以一定要建好目录再传。这个没有什么实际例子,我用的也是网上的例子。
public boolean sendFile(String filepathname, String distfilepathname) {
boolean result = true;
if (aftp != null) {
System.out.println("正在粘贴文件,请耐心等待....");

String contentperline;
try {
a = "粘贴成功!";
String fg = new String("/");
int index = filepathname.lastIndexOf(fg);
String filename = filepathname.substring(index + 1);
File localFile;
localFile = new File(filepathname);
RandomAccessFile sendFile = new RandomAccessFile(filepathname, "r");
//
sendFile.seek(0);
outs = aftp.put(distfilepathname);
outputs = new DataOutputStream(outs);
while (sendFile.getFilePointer() < sendFile.length()) {
ch = sendFile.read();
outputs.write(ch);
}
outs.close();
sendFile.close();
//FileOperator fop = new FileOperator();
//fop.DeleteFile(filepathname);
}catch (IOException e) {
a = "粘贴失败!";
result = false;
}
System.out.println(a);
//
}else {
result = false;
}
return result;
}
第二个问题没有遇到过。你是怎么写文件的?

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧