加入收藏 | 设为首页 | 会员中心 | 我要投稿 泉州站长网 (https://www.0595zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

JAVA 跨机器文件复制的二种技巧

发布时间:2021-11-30 12:54:40 所属栏目:教程 来源:互联网
导读:1.直接用SOCKET实现 server端: package com.taobao.terminator.allen.shellTest; import Java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import
1.直接用SOCKET实现
 
server端:
 
package com.taobao.terminator.allen.shellTest;   
import Java.io.DataInputStream;   
import java.io.DataOutputStream;   
import java.io.File;   
import java.io.FileInputStream;   
import java.io.FileNotFoundException;   
import java.io.FileOutputStream;   
import java.io.IOException;   
import java.io.PrintStream;   
import java.net.ServerSocket;   
import java.net.Socket;   
public class EcrmFileServerAllen {     
    private final static int port = 18110;   
    private final static int SIZE = 8192;   
    private String basePath = "/home/admin/allen/file";   
//  private String basePath = "d:/test";   
    private  void send(){   
        /**  
         * 1.发送FileList  
         * 2.接收FileName  
         * 3.传递stream  
         * 4.接收end,结束传递  
         */  
        ServerSocket server = null;   
        Socket socket = null;   
        DataInputStream  fileIn = null;   
        DataOutputStream out = null;   
        DataInputStream  in =null;   
           
        try {   
            server = new ServerSocket(port);   
            File files = new File(basePath);   
            socket = server.accept();   
            out = new DataOutputStream(socket.getOutputStream());   
            in  = new DataInputStream(socket.getInputStream());   
               
            StringBuilder builder = new StringBuilder();   
            for(String s : files.list()){   
                builder.append(s);   
                builder.append(",");   
            }   
               
            System.out.println("------------send file------------");   
            out.writeUTF(builder.toString());   
            out.flush();   
               
            while(true){   
                    System.out.println("------------begin read file------------");   
                    String fileName = in.readUTF();   
                    System.out.println("read file : " + fileName);   
                    if("EOF".equals(fileName)){   
                        System.out.println(fileName + "file send over ,thanks");   
                        break;   
                    }   
                    File file = constuctNewFile(files.getAbsolutePath(),fileName);   
                    fileIn = new DataInputStream(new FileInputStream(file));   
                    System.out.println("the file: " + fileName + "length is " + file.length());   
                    out.writeLong(file.length());   
                    out.flush();   
                       
                    byte[] buffer = new byte[SIZE];   
                    while(true){   
                        int read = 0;   
                        if(fileIn != null){   
                            read = fileIn.read(buffer);   
                        }   
                        if ( read != -1){   
                            out.write(buffer, 0, read);   
                        } else {   
                            break;   
                        }   
                    }          
                       
                    System.out.println("Write file over: " + fileName);   
                    out.flush();   
                    fileIn.close();   
                    fileIn = null;   
            }   
            System.out.println("All is over");   
        } catch (IOException e) {   
            throw new RuntimeException("IO传输异常",e);   
        } finally{   
            try {   
                out.close();   
                socket.close();   
                server.close();   
            } catch (IOException e) {   
                throw new RuntimeException("IO关闭异常",e);   
            }   
        }   
    }   
       
    private File constuctNewFile(String filePath , String fileName){   
        fileName = filePath + File.separator + fileName;   
        return new File(fileName);   
    }   
       
       
    public static void main(String arg[]) {   
        PrintStream myout = null;   
        try {   
            myout = new PrintStream(new FileOutputStream(new File("/home/admin/main.log")));   
        } catch (FileNotFoundException e) {   
            e.printStackTrace();   
        }           
        System.setOut(myout);            
        System.setErr(myout);    
        new EcrmFileServerAllen().send();   
    }   
}  

(编辑:泉州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读