SVN客户端上传文件功能的实现
2016-04-13 23:43
447 查看
SVN客户端上传功能的实现
今天下午和晚上我做了客户端的上传功能,上传功能就是添加文件信息到待上传列表,然后点击选中文件,然后就上传文件。编写程序不算太难。主要就是获取文件路径,添加文件信息到列表,然后点击选中网格中的文件名,点击上传,就可以发送文件信息给客户端,然后就是上传操作了。
然后坐到了更新服务器端的文件列表时候出现了异常,不知道怎么回事,没办法解决,就客户端编写的进程就只能暂时搁置了。
文件上传也有一点瑕疵,但是我不知道哪里出问题了。文件上传到服务器后不能打开。
下面是我的SVN客户端上传列表:
上传后的结果:
乱码的原因是源文件是中文名,但是我没有做修改。
问题不大。
下面就是更新文件列表时遇到的异常问题,没办法解决,不知道是什么意思,百度上也没有说太多,大概意思好像是程序内部接口出现了问题。
但是我没办法通过编程去解决。
我的出问题代码是:
HashMap<String,FileInfomation> map = (HashMap<String, FileInfomation>) ois.readObject();原本用小程序去做对象传输测试时候没有遇到这种问题,真是奇怪。
遇到的异常是:
要是看到博文的各位大牛有什么好方法,可以告诉我吗?
服务器端的代码是这样的,跟上面客户端代码对接时出现了上面的异常问题。
HashMap<String,FileInfomation> newMap = new HashMap<String,FileInfomation>(); 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) { } }
相关文章推荐
- [LeetCode] Valid Phone Numbers 验证电话号码
- 11_ProgressBar和ProgressDialog的区别
- 一个有趣的问题
- weblogic 停在starting状态的解决办法
- 微信开发获取AccessToken的方式
- 20145118 《Java程序设计》 实验报告二
- Ant counting
- sbt与maven简单对比
- 并查集——A bug s life
- 设计模式之Builder模式
- 十条非常有用的jQuery代码片段
- “耐撕”2016.04.13站立会议
- ”单元测试“理解与感悟
- angular(指令--restict匹配模式)
- 2016年的个人要做的事儿
- full backup of Linux OS
- Windows下MySQL5.6以上版本不能用localhost和127.0.0.1连接问题
- iOS - 百度地图
- springmvc集成mongo
- 使用数组实现堆栈和队列