首页 > 代码库 > TCP上传文件 遇到发现一些问题

TCP上传文件 遇到发现一些问题

public class TCPServerFs implements Runnable{
	private Socket s;
	public TCPServerFs(Socket s) {
		super();
		this.s = s;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		//读取文件名
		try {
			InputStream in = s.getInputStream();
			
			//读取上传的文件名
			byte[] buf = new byte[1024];
			int len = in.read(buf);
			String FileName = new String(buf,0,len);
			System.out.println("上传的文件是:"+FileName);
			File uf = new File("F:/0123/MyServer",FileName);
			//FileOutputStream fos = new FileOutputStream(uf);读取流关联了 文件对象  当该文件不存在时 会自动创建
			int count =1;
			//判断该文件是否已存在 
			while (uf.exists()) {
				System.out.println(uf.exists());
				int index = FileName.lastIndexOf(".");
				String name = FileName.substring(0, index);
				String type = FileName.substring(index+1);
				uf = new File("F:\\0123\\MyServer",name+"("+(count++)+")."+type);
			}
			System.out.println("文件在服务端的存储名:"+uf.getName());
			FileOutputStream fos = new FileOutputStream(uf);
			//读取 文件数据
			while ((len = in.read(buf))!=-1) {
				fos.write(buf,0,len);
			}
			PrintStream out = new PrintStream(s.getOutputStream(),true);
			out.println("文件shang传成功");
			System.out.println("文件来自:"+s.getInetAddress().getHostName());
		} catch (Exception e) {
			e.getMessage();
		} 
	}
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		ServerSocket ss = new ServerSocket(10713);
		while (true) {
			System.out.println("服务端已开启,等待连接");
			Socket s = ss.accept();
			
			new Thread(new TCPServerFs(s)).start();
		}
	}
}

当 创建文件对象的时候 并没有创建文件实例 所以file.exists()返回false 但是  

//FileOutputStream fos = new FileOutputStream(uf);读取流关联了 文件对象  当该文件不存在时 会自动创建     所以file.exists()返回true 永远无法完整上传的第一个文件 服务端第一个文件的大小为0

本文出自 “要么拼命,要么滚回去!” 博客,请务必保留此出处http://jiangzuun2014.blog.51cto.com/8732469/1530944