当前位置: 代码迷 >> Java Web开发 >> java实现的FTP文件夹上传只好传tomcat服务器上的文件夹
  详细解决方案

java实现的FTP文件夹上传只好传tomcat服务器上的文件夹

热度:7260   发布时间:2016-04-10 23:58:30.0
java实现的FTP文件夹上传只能传tomcat服务器上的文件夹
    最近用java实现FTP文件夹上传时,只能传tomcat服务器上的文件夹,而不能传web客户端的文件夹,请问是什么原因,如何修改?先谢谢了。
    上传文件夹的核心代码如下:
	/**
 * 上传文件或文件夹
 */
public void upload(File file, ProgressListener listener) throws Exception
{
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileTransferMode(FTPClient.STREAM_TRANSFER_MODE);

/**
 * File.isDirectory():
 *   Tests whether the file denoted by this abstract pathname is a directory
 *   测试当前file对象表示的文件是否是一个路径
 */

if(file.isDirectory())
{
/**
 * File.getName()
 *   Returns the name of the file or directory denoted by this abstract pathname
 *   返回表示当前对象的文件名
 */
ftpClient.makeDirectory(file.getName());

ftpClient.changeWorkingDirectory(file.getName());

/**
 * File.list() 
 *   Returns an array of strings naming the files and directories in the directory denoted by this abstract pathname
 *   返回当前File对象指定的路径文件列表
 */
String[] files = file.list();

for(int i=0; i<files.length; i++)
{
/**
 * File.getPath()
 *   Converts this abstract pathname into a pathname string.
 *   输出:D:\a\x.flv
 */
File file1 = new File(file.getPath()+"\\"+files[i]);

if(file1.isDirectory())
{
upload(file1, listener);
ftpClient.changeToParentDirectory();
}
else
{

File file2 = new File(file.getPath()+"\\"+files[i]);
System.out.println("else分支中  " + file.getPath()+"\\"+files[i]);
System.out.println("else分支中 file2.getName() = " + file2.getName());

InputStream input = new FileInputStream(file2);

int n = -1;
/**
 * InputStream.available()
 *   Returns an estimate of the number of bytes that can be read(or slipped over) from this input stream
 *   without blocking by the next invocation of a method for this input stream
 */
long pContentLength = input.available();
System.out.println("else分支中 pContentLength= " + pContentLength);
System.out.println("--------------------------------------------");

long trans = 0;

/**
 * bufferSize = 1024
 */
int bufferSize = ftpClient.getBufferSize();

byte[] buffer = new byte[bufferSize];

OutputStream os = ftpClient.storeFileStream(file2.getName());

/**
 * FileInputStream.read(byte[] b)
 *   Reads up to b.length bytes of data from this input stream into an array of bytes
 */
while((n = input.read(buffer)) != -1)
{
/**
 * OutputStream.write(byte[] b, int off, int len)
 *   Writes len bytes from the specified byte array starting at offset off to this output stream
 */
os.write(buffer, 0, n);
trans += n;
listener.update(trans, pContentLength, i+1);
}

input.close();
os.flush();
os.close();

ftpClient.completePendingCommand();
}
}
}
else
{
File file3 = new File(file.getPath());

InputStream input = new FileInputStream(file3);

int n = -1;
/**
 * InputStream.available()
 *   Returns an estimate of the number of bytes that can be read(or slipped over) from this input stream
 *   without blocking by the next invocation of a method for this input stream
 */
long pContentLength = input.available();

long trans = 0;

/**
 * bufferSize = 1024
 */
int bufferSize = ftpClient.getBufferSize();

byte[] buffer = new byte[bufferSize];

OutputStream os = ftpClient.storeFileStream(file3.getName());

/**
 * FileInputStream.read(byte[] b)
  相关解决方案