Android Directory Checksum checksumDir(Checksum chk, String path)

Here you can find the source of checksumDir(Checksum chk, String path)

Description

Recursively computes the checksum of a given directory tree and adds it to the provided Checksum object.

License

Apache License

Exception

Parameter Description

Declaration

private static void checksumDir(Checksum chk, String path)
        throws IOException 

Method Source Code

/*// w ww . j av a  2  s . co m
Copyright 2008 Flaptor (flaptor.com) 

Licensed under the Apache License, Version 2.0 (the "License"); 
you may not use this file except in compliance with the License. 
You may obtain a copy of the License at 

    http://www.apache.org/licenses/LICENSE-2.0 

Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an "AS IS" BASIS, 
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
See the License for the specific language governing permissions and 
limitations under the License.
 */

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.zip.CRC32;
import java.util.zip.Checksum;
import org.apache.log4j.Logger;

public class Main{
    static final String CHECKSUM_FILENAME = "checksum";
    /**
     * Recursively computes the checksum of a given directory tree and adds it
     * to the provided Checksum object.
     * @throws java.io.FileNotFoundException, java.io.IOException
     */
    private static void checksumDir(Checksum chk, String path)
            throws IOException {
        File dir = new File(path);
        if (!dir.exists()) {
            throw new FileNotFoundException(
                    "FileUtil.checksumDir: The directory " + path
                            + " does not exist");
        }
        if (dir.isDirectory()) {
            String[] names = dir.list();
            // Needed because list() method may sort different the files
            // depending on implementation, and CRC32 is non-commutative.
            Arrays.sort(names, String.CASE_INSENSITIVE_ORDER);
            for (int i = 0; i < names.length; i++) {
                if (!names[i].endsWith(CHECKSUM_FILENAME)) {
                    String filespec = path + File.separatorChar + names[i];
                    File file = new File(filespec);
                    if (file.isDirectory()) {
                        checksumDir(chk, filespec);
                    } else {
                        checksumFile(chk, filespec);
                    }
                }
            }
        }
    }
    /**
     * Computes the checksum of a given file and adds it to the provided
     * Checksum object.
     * 
     * @param chk the Checksum object.
     * @param fname the name of the file to check it's checksum.
     * @throws java.io.FileNotFoundException, java.io.IOException
     */
    private static void checksumFile(final Checksum chk, final String fname)
            throws IOException {
        BufferedInputStream bis = null;
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(fname);
            bis = new BufferedInputStream(fis);
            int len = 0;
            byte[] bytes = new byte[8192];
            while ((len = bis.read(bytes)) >= 0) {
                chk.update(bytes, 0, len);
            }
        } finally {
            Execute.close(bis);
            Execute.close(fis);
        }
    }
}