如何判断ftp上传文件完毕

问题描述:ftp上传文件的时候总是先创建了文件,然后再上传。如果此时程序读取文件可能就读取一部分不完成的数据。那么怎么解决才合理呢

方案1.上传文件的客户端先创建一个临时文件名称,然后上传完毕再重命名。而重命名是修改注册表所以不会产生过程中数据不一致的问题

方案2.在ftp客户端上传文件不由我们控制的时候,不能实施第一方案怎么办呢。打开文件在文件尾追加一个标识内容,关闭打开文件,然后在重新打开文件判断追加写入的内容时候成功,如果不成功,说明文件还在被占用,如果成功了就说明ftp上传结束了。这里感谢公司同事小苏为此方案做出的贡献。

这里解释一下,经过多次实验得知ftp客户端上传文件的时候,使用程序在此文件上追加不上内容,而且java代码不报错,所以才有了方案2.

package com.ehl.tvc.util;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
 
import org.apache.commons.io.IOUtils;
 
public class FileUtil {
	private static String endTag = "end";
	/**
	 * 判断文件是否写入内容完毕,如果完毕返回true,反之false
	 * @param f
	 * @return
	 */
	public static boolean checkIniTransfered(File f){
		OutputStream output = null;
		try {
			output = new FileOutputStream(f, true);
			output.write((endTag+"\n").getBytes());
			output.flush();
			output.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			IOUtils.closeQuietly(output);
		}
		InputStream input =null;
		try {
			input = new FileInputStream(f);
			List<String> list =  IOUtils.readLines(input);
			if(list.size()>0){
				String endstr =list.get(list.size()-1);
				if(endTag.equals(endstr)){
					return true;
				}
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			IOUtils.closeQuietly(input);
		}
		return false;
	}
}

猜你喜欢

转载自blog.csdn.net/zhubao124/article/details/81662862