JavaBlog.fr / Java.lu DEVELOPMENT,Java,Libray SAMBA JCIFS : Open Source library for CIFS/SMB networking

SAMBA JCIFS : Open Source library for CIFS/SMB networking

Hi,

Here, a simple example using the Samba Java CIFS Client Library. JCIFS is an Open Source client library that implements the CIFS/SMB networking protocol in 100% Java. CIFS is the standard file sharing protocol on the Microsoft Windows platform (e.g. Map Network Drive …). This client is used extensively in production on large Intranets.

Some resources:
https://jcifs.samba.org/
http://blog.icodejava.com/875/java-tutorial-using-jcifs-to-copy-files-to-shared-network-drive-using-username-and-password/

package com.huo.test.javacifs;

import java.io.File;
import java.text.MessageFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileFilter;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

/**
 * Class Test SAMBA for CIFS library
 * @author huseyino001
 */
public class TestCIFS implements Runnable {
	
	private NtlmPasswordAuthentication ntlmPasswordAuthentication = null;
	private SmbFile inputFolder;
	private int nbOfRetentionDays;

	public static void main(String[] args) {
		// Creation of ExecutorService
		final ScheduledExecutorService executorServiceOnceScanning = Executors.newSingleThreadScheduledExecutor();

		try {
			System.out.println(" ############################## EXECUTION "+TestCIFS.class+" - START ############################## ");
			final TestCIFS testCIFS = new TestCIFS();
			//
			NtlmPasswordAuthentication ntlmPasswordAuthentication = new NtlmPasswordAuthentication("LU", "huseyin", "mypassword");
			testCIFS.ntlmPasswordAuthentication = ntlmPasswordAuthentication;
			//
			testCIFS.inputFolder = new SmbFile("", testCIFS.ntlmPasswordAuthentication);
			System.out.println("Input folder = "+ testCIFS.inputFolder.getCanonicalPath());
			//
			testCIFS.nbOfRetentionDays = 7;
			System.out.println("Nb of retention days = "+ testCIFS.nbOfRetentionDays);
			
			// Once scanning execution
			executorServiceOnceScanning.submit(testCIFS);

			executorServiceOnceScanning.shutdown();

		} catch (Throwable e) {
			e.printStackTrace();
		}finally{
			executorServiceOnceScanning.shutdown();
		}
	}

	
	@Override
	public void run() {
		try {
			processDeletingSubFolders(this);
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println(" ############################## EXECUTION "+TestCIFS.class+" - END ############################## ");
		}
	}


	
	private void processDeletingSubFolders(final TestCIFS testCIFS) {
		try {
			System.out.println(MessageFormat.format("Scanning \"input\" directory for deleting folders : \"{0}\" - START" + IOUtils.LINE_SEPARATOR, testCIFS.inputFolder.getCanonicalPath()));

			for (final SmbFile aFolderInINPUT_SmbFile : testCIFS.inputFolder.listFiles(new SmbFileFilter() {
				@Override
				public boolean accept(SmbFile aFolderInINPUT_SmbFile) throws SmbException {
					boolean ret = false;
					
					if(aFolderInINPUT_SmbFile.isDirectory() 
						&& aFolderInINPUT_SmbFile.canRead() 
						&& aFolderInINPUT_SmbFile.canWrite() 
						&& aFolderInINPUT_SmbFile.getName().startsWith("Folder_TO_DELETE_")){
						
						if(aFolderInINPUT_SmbFile.getLastModified()>0){
							Calendar calLastModified = GregorianCalendar.getInstance();
							calLastModified.setTimeInMillis(aFolderInINPUT_SmbFile.getLastModified());

							Calendar calRetention = GregorianCalendar.getInstance();
							calRetention.add(Calendar.DAY_OF_MONTH, -testCIFS.nbOfRetentionDays);

							ret = calLastModified.compareTo(calRetention)<0;
						}
					}
					return ret; 
				}
			})) {
					System.out.println(MessageFormat.format("Deleting \"{0}\" - START", aFolderInINPUT_SmbFile));
					try {
						System.out.println(MessageFormat.format("{0}={1}", "Folder to delete", aFolderInINPUT_SmbFile.getCanonicalPath()));
						deleteDirectory(aFolderInINPUT_SmbFile);
			
						
					} catch (Throwable e) {
						StringBuilder sb = new StringBuilder(MessageFormat.format("Unable to delete folder {0}", aFolderInINPUT_SmbFile));
						sb.append(IOUtils.LINE_SEPARATOR);
						sb.append(e.getMessage());
						System.out.println(sb.toString());
						e.printStackTrace();
					}
					System.out.println(MessageFormat.format("Deleting \"{0}\" - END", aFolderInINPUT_SmbFile));
			}// FOR-END
			System.out.println(MessageFormat.format("Scanning \"input\" directory for deleting folders : \"{0}\" - END" + IOUtils.LINE_SEPARATOR, testCIFS.inputFolder.getCanonicalPath()));

		} catch (Exception e) {
			System.out.println("Listing of \""+testCIFS.inputFolder.getCanonicalPath()+"\" directory failed ");
			e.printStackTrace();
		}
	}
	
	
	private void deleteDirectory(SmbFile aSmbFile) throws Exception{
		if(aSmbFile!=null){
			aSmbFile.delete();
			if(aSmbFile.exists()){
				FileUtils.deleteDirectory(new File(aSmbFile.getUncPath()));
			}
		}
	}
	
	private void deleteFile(SmbFile aSmbFile) throws Exception{
		if(aSmbFile!=null){
			final File fileToDelete = new File(aSmbFile.getCanonicalPath());
			if (!fileToDelete.delete()) {
				aSmbFile.delete();
			}
		}
	}
	
}

Best regards,

Huseyin

Leave a Reply

Your email address will not be published.

Time limit is exhausted. Please reload CAPTCHA.

Related Post