java Example of Operating Shared Folders through the SmbFile Class

  • 2021-08-12 02:53:20
  • OfStack

Directory 1. Add dependencies 2. Read files 3. Create folders 4. Upload files 5. Download files 6. Delete files

1. Add dependencies

The jar package of the SmbFile class can be referenced by adding the following dependencies in the pom. xml folder.


<dependency>
  <groupId>jcifs</groupId>
  <artifactId>jcifs</artifactId>
  <version>1.3.17</version>
</dependency>

2. Read the file


/**
 *  Read all files under the shared folder ( Folder ) Name of 
 * @param remoteUrl
 */
public static void getSharedFileList(String remoteUrl) {
 SmbFile smbFile;
 try {
  // smb://userName:passWord@host/path/
  smbFile = new SmbFile(remoteUrl);
  if (!smbFile.exists()) {
   System.out.println("no such folder");
  } else {
   SmbFile[] files = smbFile.listFiles();
   for (SmbFile f : files) {
    System.out.println(f.getName());
   }
  }
 } catch (MalformedURLException e) {
  e.printStackTrace();
 } catch (SmbException e) {
  e.printStackTrace();
 }
}

3. Create a folder


/**
 *  Create a folder 
 * @param remoteUrl 
 * @param folderName
 * @return
 */
public static void smbMkDir(String remoteUrl, String folderName) {
 SmbFile smbFile;
 try {
  // smb://userName:passWord@host/path/folderName
  smbFile = new SmbFile(remoteUrl + folderName);
  if (!smbFile.exists()) {
   smbFile.mkdir();
  }
 } catch (MalformedURLException e) {
  e.printStackTrace();
 } catch (SmbException e) {
  e.printStackTrace();
 }
}

Step 4 Upload a file


/**
 *  Upload a file 
 * @param remoteUrl
 * @param shareFolderPath
 * @param localFilePath
 * @param fileName
 */
public static void uploadFileToSharedFolder(String remoteUrl, String shareFolderPath, String localFilePath, String fileName) {
 InputStream inputStream = null;
 OutputStream outputStream = null;
 try {
  File localFile = new File(localFilePath);
  inputStream = new FileInputStream(localFile);
  // smb://userName:passWord@host/path/shareFolderPath/fileName
  SmbFile smbFile = new SmbFile(remoteUrl + shareFolderPath + "/" + fileName);
  smbFile.connect();
  outputStream = new SmbFileOutputStream(smbFile);
  byte[] buffer = new byte[4096];
  int len = 0; //  Read length 
  while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) {
   outputStream.write(buffer, 0, len);
  }
  //  Refresh the buffered output stream 
  outputStream.flush();
 } catch (FileNotFoundException e) {
  e.printStackTrace();
 } catch (MalformedURLException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 } finally {
  try {
   outputStream.close();
   inputStream.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

Step 5 Download files


/**
 *  Download a file to a browser 
 * @param httpServletResponse
 * @param remoteUrl
 * @param shareFolderPath
 * @param fileName
 */
public static void downloadFileToBrowser(HttpServletResponse httpServletResponse, String remoteUrl, String shareFolderPath, String fileName) {
 SmbFile smbFile;
 SmbFileInputStream smbFileInputStream = null;
 OutputStream outputStream = null;
 try {
  // smb://userName:passWord@host/path/shareFolderPath/fileName
  smbFile = new SmbFile(remoteUrl + shareFolderPath + "/" + fileName);
  smbFileInputStream = new SmbFileInputStream(smbFile);
  httpServletResponse.setHeader("content-type", "application/octet-stream");
  httpServletResponse.setContentType("application/vnd.ms-excel;charset=UTF-8");
  httpServletResponse.setHeader("Content-disposition", "attachment; filename=" + fileName);
  //  Dealing with the problem of turning spaces into plus signs 
  httpServletResponse.setHeader("Content-Disposition", "attachment; fileName=" + fileName + ";filename*=utf-8''" + URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"));
  outputStream = httpServletResponse.getOutputStream();
  byte[] buff = new byte[2048];
  int len;
  while ((len = smbFileInputStream.read(buff)) != -1) {
   outputStream.write(buff, 0, len);
  }
 } catch (MalformedURLException e) {
  e.printStackTrace();
 } catch (SmbException e) {
  e.printStackTrace();
 } catch (UnknownHostException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }
 finally {
  try {
   outputStream.close();
   smbFileInputStream.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

/**
 *  Download files to specified folders 
 * @param remoteUrl
 * @param shareFolderPath
 * @param fileName
 * @param localDir
 */
public static void downloadFileToFolder(String remoteUrl, String shareFolderPath, String fileName, String localDir) {
 InputStream in = null;
 OutputStream out = null;
 try {
  SmbFile remoteFile = new SmbFile(remoteUrl + shareFolderPath + File.separator + fileName);
  File localFile = new File(localDir + File.separator + fileName);
  in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
  out = new BufferedOutputStream(new FileOutputStream(localFile));
  byte[] buffer = new byte[1024];
  while (in.read(buffer) != -1) {
   out.write(buffer);
   buffer = new byte[1024];
  }
 } catch (Exception e) {
  e.printStackTrace();
 } finally {
  try {
   out.close();
   in.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

Step 6 Delete files


/**
 *  Delete a file 
 * @param remoteUrl
 * @param shareFolderPath
 * @param fileName
 */
public static void deleteFile(String remoteUrl, String shareFolderPath, String fileName) {
 SmbFile SmbFile;
 try {
  // smb://userName:passWord@host/path/shareFolderPath/fileName
  SmbFile = new SmbFile(remoteUrl + shareFolderPath + "/" + fileName);
  if (SmbFile.exists()) {
   SmbFile.delete();
  }
 } catch (MalformedURLException e) {
  e.printStackTrace();
 } catch (SmbException e) {
 e.printStackTrace();
 }
}

Delete Folder Just point the path to the folder you want to delete.


Related articles: