您的位置:首页 > 其它

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) {

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: