远程共享目录上传下载 WINDOWS

    xiaoxiao2021-04-19  151

    转自 http://developer.51cto.com/art/201112/308235.htm

    我在这里加了下载方法

    RemoteFileUtil.Java为主要方法

    RemoteConfigUtil.Java为连接共享目录的配置 可以省略

    RemoteFileUtil.Java:

    [java]  view plain  copy package com.remote;      import java.io.BufferedInputStream;   import java.io.BufferedOutputStream;   import java.io.BufferedReader;   import java.io.File;   import java.io.FileInputStream;   import java.io.FileNotFoundException;   import java.io.FileOutputStream;   import java.io.IOException;   import java.io.InputStream;   import java.io.InputStreamReader;   import java.io.OutputStream;   import java.net.MalformedURLException;   import java.net.UnknownHostException;   import java.util.ArrayList;   import java.util.List;      import jcifs.smb.SmbException;   import jcifs.smb.SmbFile;   import jcifs.smb.SmbFileInputStream;   import jcifs.smb.SmbFileOutputStream;      /***********************************************   * @File Name: RemoteFileUtil.java   * @Description:操作远程共享文件夹类   ***********************************************/   public class RemoteFileUtil {          private String remoteHostIp; // 远程主机IP       private String account; // 登陆账户       private String password; // 登陆密码       private String shareDocName; // 共享文件夹名称          /**       * 默认构造函数       */       public RemoteFileUtil() {           RemoteConfigUtil rc = new RemoteConfigUtil();           this.remoteHostIp = rc.getREMOTE_HOST_IP();           this.account = rc.getLOGIN_ACCOUNT();           this.password = rc.getLOGIN_PASSWORD();           this.shareDocName = rc.getSHARE_DOC_NAME();       }          /**       * 构造函数       *        * @param remoteHostIp       *            远程主机Ip       * @param account       *            登陆账户       * @param password       *            登陆密码       * @param sharePath       *            共享文件夹路径       */       public RemoteFileUtil(String remoteHostIp, String account, String password,               String shareDocName) {           this.remoteHostIp = remoteHostIp;           this.account = account;           this.password = password;           this.shareDocName = shareDocName;       }          /**       * 对远程共享文件进行读取所有行       *        * @param remoteFileName       *            文件名 说明:参数为共享目录下的相对路径       *            若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);       *            若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;       * @return 文件的所有行       */       public List<string> readFile(String remoteFileName) {           SmbFile smbFile = null;           BufferedReader reader = null;           List<string> resultLines = null;           // 构建连接字符串,并取得文件连接           String conStr = null;           conStr = "smb://" + account + ":" + password + "@" + remoteHostIp + "/"                   + shareDocName + "/" + remoteFileName;           try {               smbFile = new SmbFile(conStr);           } catch (MalformedURLException e) {               e.printStackTrace();           }           // 创建reader           try {               reader = new BufferedReader(new InputStreamReader(                       new SmbFileInputStream(smbFile)));           } catch (SmbException e) {               e.printStackTrace();           } catch (MalformedURLException e) {               e.printStackTrace();           } catch (UnknownHostException e) {               e.printStackTrace();           }           // 循环对文件进行读取           String line;           try {               line = reader.readLine();               if (line != null && line.length() > 0) {                   resultLines = new ArrayList<string>();               }               while (line != null) {                   resultLines.add(line);                   line = reader.readLine();               }           } catch (IOException e) {               e.printStackTrace();           }           // 返回           return resultLines;       }          /**       * 对远程共享文件进行写入       *        * @param is       *            本地文件的输入流       * @param remoteFileName       *            远程文件名 说明:参数为共享目录下的相对路径       *            若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);       *            若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;       * @return       */       public boolean writeFile(InputStream is, String remoteFileName) {           SmbFile smbFile = null;           OutputStream os = null;           byte[] buffer = null;           try {               buffer = new byte[is.available() + 1024];           } catch (IOException e1) {               e1.printStackTrace();           }           // 构建连接字符串,并取得文件连接           String conStr = null;           conStr = "smb://" + account + ":" + password + "@" + remoteHostIp + "/"                   + shareDocName + "/" + remoteFileName;           try {               smbFile = new SmbFile(conStr);           } catch (MalformedURLException e) {               e.printStackTrace();               return false;           }              // 获取远程文件输出流并写文件到远程共享文件夹              try {                  int byteread = 0;               SmbFileOutputStream smbFileOutputStream = new SmbFileOutputStream(smbFile);   //          os = new FileOutputStream();   //          while ((byteread = is.read(buffer)) != -1) {   //              os.write(buffer, 0, byteread);   //          }               while ((byteread = is.read(buffer)) != -1) {                   smbFileOutputStream.write(buffer, 0, byteread);               }               /*               * if (oldfile.exists()) { //文件存在时 InputStream inStream = new               * FileInputStream(oldPath); //读入原文件 FileOutputStream fs = new               * FileOutputStream(newPath); byte[] buffer = new               * byte[inStream.available()]; while ( (byteread =               * inStream.read(buffer)) != -1) { bytesum += byteread; //字节数 文件大小               * System.out.println(bytesum); fs.write(buffer, 0, byteread); }               * inStream.close(); }               */              } catch (Exception e) {               e.printStackTrace();               return false;           }           return true;       }          /**       * 对远程共享文件进行写入重载       *        * @param localFileName       *            要写入的本地文件全名       * @param remoteFileName       *            远程文件名 说明:参数为共享目录下的相对路径       *            若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);       *            若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;       * @return       */       public boolean writeFile(String localFileFullName, String remoteFileName) {           try {               return writeFile(new FileInputStream(new File(localFileFullName)),                       remoteFileName);           } catch (FileNotFoundException e) {               e.printStackTrace();               return false;           }       }          /**       * 对远程共享文件进行写入重载       *        * @param localFileName       *            要写入的本地文件       * @param remoteFileName       *            远程文件名 说明:参数为共享目录下的相对路径       *            若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);       *            若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;       * @return       */       public boolean writeFile(File localFile, String remoteFileName) {           try {               return writeFile(new FileInputStream(localFile), remoteFileName);           } catch (FileNotFoundException e) {               e.printStackTrace();               return false;           }       }          /**       * 对远程共享文件所有文件       *        * @return 所有文件       */       public List<string> getFiles() {           SmbFile smbFile = null;           List<string> resultLines = new ArrayList<string>();           // 构建连接字符串,并取得文件连接           String conStr = null;           conStr = "smb://" + account + ":" + password + "@" + remoteHostIp + "/"                   + shareDocName + "/";           try {               smbFile = new SmbFile(conStr);           } catch (MalformedURLException e) {               e.printStackTrace();           }           // 创建reader           try {               String[] a = smbFile.list();               for (int i = 0; i < a.length; i++) {                   resultLines.add(a[i]);                   System.out.println(a[i]);               }           } catch (SmbException e) {               e.printStackTrace();           } catch (Exception e) {               e.printStackTrace();           }           // 返回           return resultLines;       }          /**       * 在本地为共享计算机创建文件夹       *        * @param remoteUrl       *            远程计算机路径       */       public void smbMkDir(String name) {           // 注意使用jcifs-1.3.15.jar的时候 操作远程计算机的时候所有类前面须要增加Smb           // 创建一个远程文件对象           String conStr = "smb://" + account + ":" + password + "@"                   + remoteHostIp + "/" + shareDocName;           SmbFile remoteFile;           try {               remoteFile = new SmbFile(conStr + "/" + name);               if (!remoteFile.exists()) {                   remoteFile.mkdir();// 创建远程文件夹               }           } catch (MalformedURLException e) {               e.printStackTrace();           } catch (SmbException e) {               e.printStackTrace();           }       }          /**       * 删除文件夹       *        * @param folderPath       *            共享文件夹下一个文件夹名       * @return       */       public void delFolder(String folderPath) {           // String conStr =           // "smb://"+LOGIN_ACCOUNT+":"+LOGIN_PASSWORD+"@"+remoteHostIp+"/"+shareDocName;           try {               delAllFile(folderPath); // 删除完里面所有内容               String filePath = folderPath;               filePath = filePath.toString();                  SmbFile myFilePath = new SmbFile(filePath);               myFilePath.delete(); // 删除空文件夹           } catch (Exception e) {               String message = ("删除文件夹操作出错");               System.out.println(message);           }       }          /**       * 删除共享文件夹下一个文件夹名       *        * @param path       *            共享文件夹下一个文件夹名       * @return       * @return       */       public boolean delAllFile(String path) {           boolean bea = false;           try {               SmbFile file = new SmbFile(path);               if (!file.exists()) {                   return bea;               }               if (!file.isDirectory()) {                   return bea;               }               String[] tempList = file.list();               SmbFile temp = null;               for (int i = 0; i < tempList.length; i++) {                   if (path.endsWith("/")) {                       temp = new SmbFile(path + tempList[i]);                   } else {                       temp = new SmbFile(path + "/" + tempList[i]);                   }                   if (temp.isFile()) {                       temp.delete();                   }                   if (temp.isDirectory()) {                       delAllFile(path + "/" + tempList[i] + "/");// 先删除文件夹里面的文件                       delFolder(path + "/" + tempList[i] + "/");// 再删除空文件夹                       bea = true;                   }               }               return bea;           } catch (Exception e) {               return bea;           }       }          /**       * 复制整个文件夹的内容       *        * @param oldPath       *            准备拷贝的目录       * @param newPath       *            指定绝对路径的新目录       * @return       */       public void copyFolder(String oldPath, String newPath) {           String conStr = "smb://" + account + ":" + password + "@"                   + remoteHostIp + "/" + shareDocName;           System.err.println(conStr);           try {               /**               * 如果存在文件夹删除文件 SmbFile exittemp = new SmbFile(conStr + "/"+newPath);               * if(exittemp.exists()){ delFolder(conStr+"/"+newPath+"/"); }               */               SmbFile exittemps = new SmbFile(conStr + "/" + newPath);               if (!exittemps.exists()) {                   exittemps.mkdirs(); // 如果文件夹不存在 则建立新文件夹               }               File a = new File(oldPath);               String[] file = a.list();               File temp = null;               for (int i = 0; i < file.length; i++) {                   if (oldPath.endsWith("/")) {                       temp = new File(oldPath + file[i]);                   } else {                       temp = new File(oldPath + "/" + file[i]);                   }                   if (temp.isFile()) {                       if (temp.exists()) {                           writeFile(temp, newPath + "/" + file[i]);                       }                   }                   if (temp.isDirectory()) {// 如果是子文件夹                       copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]);                   }               }              } catch (Exception e) {               String message = "复制整个文件夹内容操作出错";               System.out.println(message);               e.printStackTrace();           }       }          /**       * 复制文件到远程计算机,如果目标路径不存在则创建,反之不创建       *        * @param localFileFullName       *            本地指定文件路径       * @param targetDir       *            目标路径       */       public void copyFileToRemoteDir(String localFileFullName, String targetDir) {           targetDir = targetDir.replace("\\", "/");           System.err.println(localFileFullName + "--" + targetDir);           InputStream is = null;           SmbFile smbFile = null;           OutputStream os = null;           byte[] buffer = new byte[1024 * 8];           // 构建连接字符串,并取得文件连接           String conStr = null;           conStr = "smb://" + account + ":" + password + "@" + remoteHostIp + "/"                   + shareDocName + "/" + targetDir;           System.err.println(conStr);           SmbFile sf;           try {               sf = new SmbFile(conStr);               if (!sf.exists()) {                   // 新建目标目录                   sf.mkdirs();                   is = new FileInputStream(new File(localFileFullName));                   // 获取远程文件输出流并写文件到远程共享文件夹                   os = new BufferedOutputStream(new SmbFileOutputStream(smbFile));                   while ((is.read(buffer)) != -1) {                       os.write(buffer);                   }               }           } catch (Exception e) {               e.printStackTrace();               System.err.println("提示:复制整个文件夹内容操作出错。");           }              File file = new File(localFileFullName);           if (file.isFile()) {               File sourceFile = file; // 源文件               File targetFile = new File(new File(targetDir).getAbsolutePath()                       + File.separator + file.getName());// 目标文件               String name = file.getName();// 文件名               if (targetDir != null && targetFile != null) {                   writeFile(sourceFile, "/" + targetDir + "/" + name); // 复制文件               } else if (targetFile != null) {                   writeFile(sourceFile, name); // 复制文件               }           }       }          /**       * 循环获取文件夹内所有匹配的文件       *        * @param strPath       *            路径       * @param subStr       *            匹配字符       * @return       */       public ArrayList<string> refreshFileList(String strPath, String subStr) {           ArrayList<string> filelist = new ArrayList<string>();           File dir = new File(strPath);           File[] files = dir.listFiles();           if (files == null)               return null;           for (int i = 0; i < files.length; i++) {               if (!files[i].isDirectory()) {                   // 应该是绝对路径                   // String strFileName =                   // files[i].getAbsolutePath().toLowerCase();                   if (files[i].getName().indexOf(subStr) >= 0) {                       filelist.add(files[i].getName());                   }               }           }           return filelist;       }          /**       * 从共享目录拷贝文件到本地       *        * @param remoteUrl       *            共享目录内的文件路径       * @param localDir       *            本地目录 文件名不会改变       */       public void downLoadFile(String remoteUrlFile, String localDir) {           remoteUrlFile = remoteUrlFile.replace("\\", "/");           String conStr = "smb://" + account + ":" + password + "@"                   + remoteHostIp + "/" + shareDocName + "/" + remoteUrlFile;           InputStream in = null;           OutputStream out = null;           try {               SmbFile remoteFile = new SmbFile(conStr);                  String fileName = remoteFile.getName();               // fileName.endsWith("")               File localFile = new File(localDir + "/" + fileName);               (new File(localDir)).mkdirs(); // 如果文件夹不存在 则建立新文件夹               in = new BufferedInputStream(new SmbFileInputStream(remoteFile));               out = new FileOutputStream(localFile);               byte[] buffer = new byte[20480];               int len = 0;               while ((len = in.read(buffer)) != -1) {                   out.write(buffer, 0, len);               }           } catch (Exception e) {               e.printStackTrace();           } finally {               try {                   if (out != null) {                       out.close();                       out = null;                   }                   if (in != null) {                       in.close();                       in = null;                   }               } catch (IOException e) {                   e.printStackTrace();               }           }       }          /**       * 复制远程共享文件夹内容       *        * @param remoteUrlDirectory       *            String 原文件路径 共离目录下的子目录 如:dir/game       * @param localDir       *            String 复制后路径 如:f:/fqf/ff       */       public void downLoadDirectory(String remoteUrlDirectory, String localDir) {           remoteUrlDirectory = remoteUrlDirectory.replace("\\", "/");           String conStr = "smb://" + account + ":" + password + "@"                   + remoteHostIp + "/" + shareDocName + "/";           InputStream in = null;           OutputStream out = null;           try {               (new File(localDir)).mkdirs(); // 如果文件夹不存在 则建立新文件夹               SmbFile remoteFile = new SmbFile(conStr + remoteUrlDirectory + "/");               String[] fileNameList = remoteFile.list();               SmbFile tempSmb = null;               for (int i = 0; i < fileNameList.length; i++) {                   String _fileName = fileNameList[i];                   _fileName = _fileName.replace("\\", "/");                   // 将路径                   if (remoteUrlDirectory.endsWith("/")) {                       tempSmb = new SmbFile(conStr + remoteUrlDirectory                               + _fileName);                   } else {                       tempSmb = new SmbFile(conStr + remoteUrlDirectory + "/"                               + _fileName);                   }                   if (tempSmb.isFile()) {                       in = new BufferedInputStream(new SmbFileInputStream(                               remoteFile + "/" + _fileName));                       out = new FileOutputStream(localDir + "/" + _fileName);                       byte[] buffer = new byte[20480];                       int len = 0;                       while ((len = in.read(buffer)) != -1) {                           out.write(buffer, 0, len);                       }                       out.flush();                   }                      if (tempSmb.isDirectory()) {                       downLoadDirectory(remoteUrlDirectory + "/" + _fileName,                               localDir + "/" + _fileName);                   }               }           } catch (Exception e) {               e.printStackTrace();           } finally {               try {                   if (out != null) {                       out.close();                       out = null;                   }                   if (in != null) {                       in.close();                       in = null;                   }               } catch (IOException e) {                   e.printStackTrace();               }           }       }          // 测试从本地复制文件到远程目标目录,测试已通过       public static void main(String[] args) {           long startTime = System.currentTimeMillis(); // 获取开始时间          //  远程连接配置       //  RemoteConfigUtil rc = new RemoteConfigUtil("192.168.3.200","administrator","harmony123;","autoUpdate","C:\\logs","qwe");           RemoteFileUtil util = new RemoteFileUtil("192.168.3.200","administrator""harmony123;""autoUpdate");   //      RemoteFileUtil util = new RemoteFileUtil("172.16.160.67","administrator", "admin", "testTemp");   //      util.copyFileToRemoteDir("D:\\新建文本文档.txt","");           util.copyFolder("c:\\down""qwe");                                 //下载共享目录下的JDK文件到 c:\\down   //      util.downLoadFile("jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe","c:\\down\\");              // 将共享目录下的qw文件夹里的内容下载到目录 c:\\dow   //      util.downLoadDirectory("qw", "c:\\down");              long endTime = System.currentTimeMillis(); // 获取结束时间           System.out.println("程序运行时间: " + (endTime - startTime) + "ms");          }   }</string></string></string></string></string></string></string></string></string>  

    =================================================

    RemoteConfigUtil.Java

    [java]  view plain  copy package com.remote;      import java.io.IOException;   import java.util.Properties;      /**   * 读取配置文件中key对应的value   *    * @author JunjieQin   */   public class RemoteConfigUtil {       /*       * asd       */       private String REMOTE_HOST_IP;       private String LOGIN_ACCOUNT;       private String LOGIN_PASSWORD;       private String SHARE_DOC_NAME;       private String sourcePath;       private String targetPath;          // 无参构造方法       public RemoteConfigUtil() {           try {               // 读取配置文件               Properties prop = new Properties();               prop.load(this.getClass().getClassLoader()                       .getResourceAsStream("copyRemoteFile.properties"));               // 根据 key 获取 value               REMOTE_HOST_IP = prop.getProperty("REMOTE_HOST_IP");               LOGIN_ACCOUNT = prop.getProperty("LOGIN_ACCOUNT");               LOGIN_PASSWORD = prop.getProperty("LOGIN_PASSWORD");               SHARE_DOC_NAME = prop.getProperty("SHARE_DOC_NAME");               sourcePath = prop.getProperty("sourcePath");               targetPath = prop.getProperty("targetPath");           } catch (IOException e) {               e.printStackTrace();           }       }          // 参数构造方法       public RemoteConfigUtil(String REMOTE_HOST_IP, String LOGIN_ACCOUNT,               String LOGIN_PASSWORD, String SHARE_DOC_NAME, String sourcePath,               String targetPath) {           // 根据 key 获取 value           this.REMOTE_HOST_IP = REMOTE_HOST_IP;           this.LOGIN_ACCOUNT = LOGIN_ACCOUNT;           this.LOGIN_PASSWORD = LOGIN_PASSWORD;           this.SHARE_DOC_NAME = SHARE_DOC_NAME;           this.sourcePath = sourcePath;           this.targetPath = targetPath;       }          public String getLOGIN_ACCOUNT() {           return LOGIN_ACCOUNT;       }          public void setLOGIN_ACCOUNT(String login_account) {           LOGIN_ACCOUNT = login_account;       }          public String getLOGIN_PASSWORD() {           return LOGIN_PASSWORD;       }          public void setLOGIN_PASSWORD(String login_password) {           LOGIN_PASSWORD = login_password;       }          public String getREMOTE_HOST_IP() {           return REMOTE_HOST_IP;       }          public void setREMOTE_HOST_IP(String remote_host_ip) {           REMOTE_HOST_IP = remote_host_ip;       }          public String getSHARE_DOC_NAME() {           return SHARE_DOC_NAME;       }          public void setSHARE_DOC_NAME(String share_doc_name) {           SHARE_DOC_NAME = share_doc_name;       }          public String getSourcePath() {           return sourcePath;       }          public void setSourcePath(String sourcePath) {           this.sourcePath = sourcePath;       }          public String getTargetPath() {           return targetPath;       }          public void setTargetPath(String targetPath) {           this.targetPath = targetPath;       }      }  
    转载请注明原文地址: https://ju.6miu.com/read-676157.html

    最新回复(0)