首页 > 编程语言 > 详细

java实现文件传输

时间:2015-03-24 19:09:27      阅读:212      评论:0      收藏:0      [点我收藏+]

在windows下装了个linux虚拟机,两者之间传输文件挺麻烦的.写了个简单的文件传输程序,来方便自己数据传送.

server 端:

 

技术分享import java.io.BufferedReader;
技术分享
import java.io.BufferedWriter;
技术分享
import java.io.File;
技术分享
import java.io.FileOutputStream;
技术分享
import java.io.InputStream;
技术分享
import java.io.InputStreamReader;
技术分享
import java.io.OutputStreamWriter;
技术分享
import java.io.PrintWriter;
技术分享
import java.net.ServerSocket;
技术分享
import java.net.Socket;
技术分享
技术分享
class CPThread extends Thread{
技术分享    Socket socket 
= null;
技术分享    
public CPThread(Socket socket){
技术分享        
this.socket = socket;
技术分享    }

技术分享    
public void run(){
技术分享        
try{
技术分享            InputStream in 
= 
技术分享                      socket.getInputStream();
技术分享            PrintWriter out 
= 
技术分享                  
new PrintWriter(
技术分享                    
new BufferedWriter(
技术分享                      
new OutputStreamWriter(
技术分享                        socket.getOutputStream())),
true);
技术分享            
技术分享            
while(true)
技术分享            
{
技术分享                
//第一个參数为命令
技术分享
                byte cmd[] = new byte[128];
技术分享                
int b = 0;
技术分享                
while(b<cmd.length){
技术分享                    b 
+= in.read(cmd, b, cmd.length-b);
技术分享                }

技术分享                
int ends = 0;
技术分享                
for(int i=0;i<cmd.length;i++){
技术分享                    
if(cmd[i]==-0){
技术分享                        ends 
= i;
技术分享                        
break;
技术分享                    }

技术分享                }

技术分享                String cmds 
= new String(cmd,0,ends);
技术分享                
if("exit".equals(cmds)){
技术分享                    System.exit(
0);
技术分享                }

技术分享                
else if("cp".equals(cmds)){
技术分享                    
byte[] filename = new byte[256];
技术分享                    b 
= 0;
技术分享                    
while(b<filename.length){
技术分享                        b 
+= in.read(filename, b, filename.length-b);
技术分享                    }

技术分享                    ends 
= 0;
技术分享                    
for(int i=0;i<filename.length;i++){
技术分享                        
if(filename[i]==-0){
技术分享                            ends 
= i;
技术分享                            
break;
技术分享                        }

技术分享                    }

技术分享                    String filenames 
= new String(filename,0,ends);
技术分享                    File fileout 
= new File(filenames);
技术分享                    
if(fileout.isFile()){
技术分享                        
throw new Exception("file exists"+fileout.getAbsolutePath());
技术分享                    }

技术分享                    FileOutputStream fos 
= new FileOutputStream(fileout);
技术分享                    
技术分享                    
byte[] filesize = new byte[64];
技术分享                    b 
= 0;
技术分享                    
while(b<filesize.length){
技术分享                        b 
+= in.read(filesize, b, filesize.length-b);
技术分享                    }

技术分享                    
技术分享                    ends 
= 0;
技术分享                    
for(int i=0;i<filesize.length;i++){
技术分享                        
if(filesize[i]==-0){
技术分享                            ends 
= i;
技术分享                            
break;
技术分享                        }

技术分享                    }

技术分享                    String filesizes 
= new String(filesize,0,ends);
技术分享                    
技术分享                    System.out.println(
"filesize:"+filesizes);
技术分享                    
int ta = Integer.parseInt(filesizes);
技术分享                    
byte[] buf = new byte[1024*10];
技术分享                    
//InputStream ins = socket.getInputStream();
技术分享
                    while(true){
技术分享                        
if(ta==0){
技术分享                            
break;
技术分享                        }

技术分享                        
int len = ta;
技术分享                        
if(len>buf.length){
技术分享                            len 
= buf.length;
技术分享                        }

技术分享                        
int rlen = in.read(buf, 0, len);
技术分享                        
技术分享                        
//int rlen = ins.read(buf, 0, len);
技术分享
                        ta -= rlen;
技术分享                        
if(rlen>0){
技术分享                            fos.write(buf,
0,rlen);
技术分享                            fos.flush();
技术分享                        }

技术分享                        
else{
技术分享                            
break;
技术分享                        }

技术分享                    }

技术分享                    out.println(
"cp finish!");
技术分享                    fos.close();
技术分享                    
break;
技术分享                }

技术分享                
else{
技术分享                    System.out.println(
"err command!");
技术分享                    out.println(
"err command!");
技术分享                    
break;
技术分享                }

技术分享            }

技术分享            socket.close();
技术分享        }
catch(Exception e){
技术分享            e.printStackTrace();
技术分享            
技术分享        }

技术分享    }

技术分享}

技术分享
public class JCPServer {
技术分享
技术分享    
/**
技术分享     * 
@param args
技术分享     
*/

技术分享    
public static void main(String[] args) throws Exception {
技术分享        
// TODO Auto-generated method stub
技术分享
        int num = args.length;
技术分享        
if(num<=0){
技术分享            System.out.println(
"please input server port!");
技术分享            System.exit(
0);
技术分享        }

技术分享        
int port = Integer.parseInt(args[0]);
技术分享        System.out.println(
"you input port:"+port);
技术分享        
//绑定接受数据端口
技术分享
        ServerSocket s = new ServerSocket(port);
技术分享        
while(true){
技术分享            Socket socket 
= s.accept();
技术分享            
new CPThread(socket).start();
技术分享        }

技术分享    }

技术分享
技术分享}

技术分享

 

client 端

 

技术分享import java.io.BufferedWriter;
技术分享
import java.io.File;
技术分享
import java.io.FileInputStream;
技术分享
import java.io.OutputStream;
技术分享
import java.io.OutputStreamWriter;
技术分享
import java.io.PrintWriter;
技术分享
import java.net.InetAddress;
技术分享
import java.net.Socket;
技术分享
技术分享
技术分享
public class JCPClient {
技术分享
技术分享    
/**
技术分享     * 
@param args
技术分享     
*/

技术分享    
public static void main(String[] args)throws Exception {
技术分享        
// TODO Auto-generated method stub
技术分享
        int num = args.length;
技术分享        
if(num<=3){
技术分享            System.out.println(
"please input server ip port filefrom fileto!");
技术分享            System.exit(
0);
技术分享        }

技术分享        System.out.println(
"host:"+args[0]);
技术分享        System.out.println(
"port:"+args[1]);
技术分享        System.out.println(
"filefrom:"+args[2]);
技术分享        System.out.println(
"fileto:"+args[3]);
技术分享        InetAddress addr 
= InetAddress.getByName(args[0]);
技术分享        Socket socket 
= 
技术分享              
new Socket(addr, Integer.parseInt(args[1]));
技术分享        OutputStream out 
= socket.getOutputStream();
技术分享        
byte[] cmd = new byte[128];
技术分享        
byte[] tcmd = "cp".getBytes();
技术分享        
for(int i=0;i<tcmd.length;i++){
技术分享            cmd[i] 
= tcmd[i];
技术分享        }

技术分享        cmd[tcmd.length] 
= -0;
技术分享        out.write(cmd,
0,cmd.length);
技术分享        
//文件名称
技术分享
        byte[] file = new byte[256];
技术分享        
byte[] tfile = args[3].getBytes();
技术分享        
for(int i=0;i<tfile.length;i++){
技术分享            file[i] 
= tfile[i];
技术分享        }

技术分享        file[tfile.length] 
= -0;
技术分享        out.write(file,
0,file.length);
技术分享        
技术分享        
//大小
技术分享
        File filein = new File(args[2]);
技术分享        
byte[] size = new byte[64];
技术分享        
byte[] tsize = (""+filein.length()).getBytes();
技术分享        
技术分享        
for(int i=0;i<tsize.length;i++){
技术分享            size[i] 
= tsize[i];
技术分享        }

技术分享        size[tsize.length] 
= -0;
技术分享        out.write(size,
0,size.length);
技术分享        
技术分享        FileInputStream fis 
= null;
技术分享        
byte[] buf = new byte[1024*10];
技术分享        
//char[] bufC = new char[1024*10];
技术分享
        fis = new FileInputStream(filein);
技术分享        
int readsize = 0;
技术分享        
//OutputStream ops = socket.getOutputStream();
技术分享
        while((readsize = fis.read(buf, 0, buf.length))>0){
技术分享            out.write(buf,
0,readsize);
技术分享            out.flush();
技术分享        }

技术分享        socket.close();
技术分享    }

技术分享
技术分享}

技术分享

java实现文件传输

原文:http://www.cnblogs.com/bhlsheji/p/4363617.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!