Java windows和linux之间FTP事务期间的不同路径分隔符
我正在通过FTP将文件上载到Linux服务器。我使用Apache的 假设我想将文件Java windows和linux之间FTP事务期间的不同路径分隔符,java,ftp,Java,Ftp,我正在通过FTP将文件上载到Linux服务器。我使用Apache的 假设我想将文件C:\\downloads\\13\\myFile.txt上传到服务器/data/downloads/13/myFile.txt 在上传之前,我使用listFiles确定将发送到的目录是否存在 当我说 ftp.listFiles("/data/downloads/13"); 我得到一个包含一个文件对象的数组,这意味着路径存在(我不需要创建文件夹)。但是当我说 ftp.listFiles("\\data\\down
C:\\downloads\\13\\myFile.txt
上传到服务器/data/downloads/13/myFile.txt
在上传之前,我使用listFiles
确定将发送到的目录是否存在
当我说
ftp.listFiles("/data/downloads/13");
我得到一个包含一个文件对象的数组,这意味着路径存在(我不需要创建文件夹)。但是当我说
ftp.listFiles("\\data\\downloads\\13");
我得到一个空数组,这意味着路径不存在
这是因为我在Windows机器上运行应用程序,所以路径分隔符是不同的
我决定的解决方案是在继续FTP事务之前,通过将\
替换为/
来规范路径
这是解决此问题的正确方法吗?这是使用“/”的正确方法,但不知道为什么要在FTP事务之前替换路径分隔符。但是您是从windows运行的,您可以使用“/”作为源提供windows文件的完整路径,并且可以使用“/data/downloads/13”作为目标 如果我误解了,请提供更多说明。来自RFC 959: 路径名
Pathname is defined to be the character string which must be
input to a file system by a user in order to identify a file.
Pathname normally contains device and/or directory names, and
file name specification. FTP does not yet specify a standard
pathname convention. Each user must follow the file naming
conventions of the file systems involved in the transfer.
由于没有路径名标准,FTP服务器可以选择使用其本地文件系统的路径名约定(如果愿意)。如果要连接到任何其他服务器,您可能希望在修改路径名之前向服务器发送SYST请求。
最小FTP服务器实现不需要SYST命令,因此某些服务器可能无法识别此命令。但是,如果该命令已经实现,它将允许您修改路径名以使其兼容。以下是您可能收到的5个示例回复:
215 UNIX Type: L8
215 UNIX Type: L8 Version: BSD-44
215 NetWare system type.
215 MACOS Peter's Server
215 AmigaOS
从您链接到的Apache FTPClient文档中,我相信发送SYST请求的函数是这样的,尽管我不熟悉Java和这个Apache客户端: 最后是一个
但是,如果服务器仅支持UNIX路径名,则必须将Windows路径名从“\”转换为“/”。路径分隔符被替换/规范化,因为目标文件夹是从源文件夹生成的,它使用windows风格的路径分隔符。@PeterLawrey我有点担心有人确实将服务器更改为不接受
/
的服务器,然后告诉我我的代码被破坏了!只是在某种程度上,因为我认为不存在这样的系统。@PeterLawrey FTP提供了某个文件系统的抽象视图,所以分隔符是“/”,因为这是FTP协议定义的,而不是主机操作系统期望的(即使您在Windows上运行某个FTP服务器,它也是“/”@Gyrogeerless感谢您的更正。所有操作系统都应该起诉“/”。)
215 UNIX Type: L8
215 UNIX Type: L8 Version: BSD-44
215 NetWare system type.
215 MACOS Peter's Server
215 AmigaOS