SVN客户端上传文件功能的实现

SVN客户端上传功能的实现

今天下午和晚上我做了客户端的上传功能,上传功能就是添加文件信息到待上传列表,然后点击选中文件,然后就上传文件。

编写程序不算太难。主要就是获取文件路径,添加文件信息到列表,然后点击选中网格中的文件名,点击上传,就可以发送文件信息给客户端,然后就是上传操作了。

然后坐到了更新服务器端的文件列表时候出现了异常,不知道怎么回事,没办法解决,就客户端编写的进程就只能暂时搁置了。

文件上传也有一点瑕疵,但是我不知道哪里出问题了。文件上传到服务器后不能打开。

下面是我的SVN客户端上传列表:

SVN客户端上传文件功能的实现_第1张图片

上传后的结果:

SVN客户端上传文件功能的实现_第2张图片

乱码的原因是源文件是中文名,但是我没有做修改。

问题不大。

下面就是更新文件列表时遇到的异常问题,没办法解决,不知道是什么意思,百度上也没有说太多,大概意思好像是程序内部接口出现了问题。

但是我没办法通过编程去解决。

我的出问题代码是:

HashMap map = (HashMap) ois.readObject();
原本用小程序去做对象传输测试时候没有遇到这种问题,真是奇怪。

遇到的异常是:

SVN客户端上传文件功能的实现_第3张图片


要是看到博文的各位大牛有什么好方法,可以告诉我吗?

服务器端的代码是这样的,跟上面客户端代码对接时出现了上面的异常问题。

HashMap newMap = new HashMap();
		newMap.putAll(FileAndSocketList.FileInfomationmap);
		try {
			oos.writeObject(newMap);
			oos.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}


这个SVN项目是我做过的最大的程序了,工作量很大,一个人的话,要花很多时间才能做完,也让我更加深刻的明白更大的项目工程是需要大家一起来完成的,个人完成是行不通的。

因为代码很多,我就发一些吧,顺便刷一下C币



下面是服务器接收客户端的上传操作,对了,这里也有一个小问题,用对象输入输出流来写long型的时候,出了错误,读出了一个很大很大的数,然后我只能够long转化成字符串传输,然后再转成long,饶了一圈,对这个问题也是莫名其妙。。。


服务器处理上传操作的代码:

public static void UpLoad(ObjectInputStream ois,SocketThread st){//服务器接收客户端上传文件
		try{
			System.out.println("进入UpLoad方法");
			String fileName = Tool.receiveMsg(ois);
//			long size = ois.readLong();
			String Msg = Tool.receiveMsg(ois);
			long size = Long.parseLong(Msg);
			System.out.println(size);
			String path = "C:\\Users\\asus\\Desktop\\javaData\\SVN项目数据\\SVN服务器";
			String owner = st.userName;
			System.out.println(fileName+"   "+size+"    "+owner);
			FileInfomation fifd = new FileInfomation(fileName,size,path,owner,0);//上传文件后创建一个文件信息对象
			FileAndSocketList.FileInfomationmap.put(fileName, fifd);			//文件信息对象放到HashMap中
			System.out.println("创建好了fifd对象");
			String newfileName = path + "\\" + fileName;
			File file = new File(newfileName);
			System.out.println("path:"+path);
			FileOutputStream fos = new FileOutputStream(file);
			System.out.println("创建好了fos文件输出流");
			long count = size/2048;
			int last = (int) (size%2048);
			byte[] bytes = new byte[2048];
			System.out.println("服务器端也创建好了btye[]数组"+"count: "+count+" last: "+last);
			while( count > 0 ){
				ois.readFully(bytes);
				fos.write(bytes);
				fos.flush();
				count -- ;
			}
			if( last > 0 ){
				bytes = new byte[2048];
				ois.readFully(bytes);
				fos.write(bytes);
				fos.flush();
			}
			fos.close();
			System.out.println("fos关闭");
			FileAndSocketList.FileInfomationmap.put(fileName, fifd);
			System.out.println("接收文件结束");
		}catch(Exception e){
			
		}
	}
下面是客户端的上传代码:

public void upLoadFileToServer(ObjectOutputStream oos,ObjectInputStream ois,String fileName){
		Tool.Send(oos, "UpLoad\r\n");//发送协议
		Tool.Send(oos, fileName+"\r\n");//发送文件名
		long size = FileMsgList.uplist.get(fileName).size;
		try {
//			oos.writeLong(size);//发送文件大小
			String Msg = Long.toString(size)+"\r\n";
			Tool.Send(oos, Msg);
			FileInputStream fis = new FileInputStream(FileMsgList.uplist.get(fileName).path);
			long count = size/2048;
			int last = (int) (size%2048);
			byte[] bytes = new byte[2048];
			System.out.println("创建好了bytes"+"count "+count+" last: "+last);
			while( count > 0 ){
				fis.read(bytes);
				oos.write(bytes);
				oos.flush();
				count -- ;
			}
			if( last > 0 ){
				bytes = new byte[2048];
				fis.read(bytes);
				oos.write(bytes);
				oos.flush();
			}
			fis.close();
			System.out.println("文件传输完毕!");
		} catch (IOException e) {
			
		}
	}



你可能感兴趣的:(java通信进阶)