Файловый объект API Java не может определить истинное количество файлов в папке - PullRequest
0 голосов
/ 05 декабря 2011

Я работаю с некоторыми манипуляциями с файлами, просто с помощью простого чтения и записи с использованием объекта File API Java.

так вот что я делаю. сначала приложение получает zip-файл, а затем извлекает содержимое в TEMPFOLDER . И тогда другой класс, полностью независимый, будет работать с TEMPFOLDER . Он проверит количество файлов и подсчитает их все. затем будет выполнять некоторые функции для выполнения некоторых функций базы данных, чтобы записать содержимое zip-файла в базу данных

но вот в чем проблема, когда я впервые использую приложение, оно идет гладко. тогда, когда я это сделаю во второе время, он потерпит неудачу, потому что второй класс, который должен проверять TEMPFOLDER , возвращает 0 как количество файлов в указанной папке, но когда я проверяю его вручную, у него есть некоторые содержание.

и шаблон, который он делает, когда я постоянно тестирую его, он будет работать, тогда он не будет работать, он будет работать, тогда он не будет работать. это действует так. причина, по которой он не работает, заключается в том, что приложение не может правильно определить количество файлов в папке. у него есть файлы, но объект file возвращает, что в нем нет элементов. но после ошибки, если вы запустите ее снова, она будет работать так, как она должна работать.

если бы вы могли высказать некоторые предложения из моего объяснения, которое представляет собой вид на тысячу футов, я был бы признателен за это и попробовал бы для моей отладки. но если вам понадобятся некоторые коды, я опубликую их позже

кстати, я использую веб-браузер и сервлет для принятия zip-файла

вот метод, который я использовал для записи в файловую систему.

public void extractZipAndWriteContentsToFileSystem(ZipFile zipFile) throws IOException, Exception { 


    Enumeration en = zipFile.entries();

    while (en.hasMoreElements()) {
        ZipEntry zipEntry = (ZipEntry) en.nextElement();

        String name = zipEntry.getName();
        long size = zipEntry.getSize();
        long compressedSize = zipEntry.getCompressedSize();

        File file = new File(zipExtractsTempRepo+name);
        if (name.endsWith("/")) {
            file.mkdirs();
            continue;
        }

        File parent = file.getParentFile();
        if (parent != null) {
            parent.mkdirs();
        }

        InputStream is = zipFile.getInputStream(zipEntry);
        FileOutputStream fos = new FileOutputStream(file);
        byte[] bytes = new byte[1024];
        int length;
        while ((length = is.read(bytes)) >= 0) {
            fos.write(bytes, 0, length);
        }

        file = null;
        parent = null;

        is.close();
        fos.close();
    }

    zipFile.close();
    traverse(new File(zipExtractsTempRepo));        
}

/**
 * this method traverses through a folder and its subfolders 
 * and its subfolders and ...
 * 
 * this method retrieves objects that are files. if it is not
 * a file, (then a directory) it looks inside it to look
 * for other files
 * 
 * @param file
 * @throws IOException
 */
public void traverse(File file) throws IOException {

    if (file.isDirectory()) {
        File[] allFiles = file.listFiles();
        for (File aFile : allFiles) {
            traverse(aFile);
        }
    } else {
        FileInputStream in = new FileInputStream(file);
        FileOutputStream out = new FileOutputStream(
                new File(this.tempRepo + file.getName()));

        byte[] bytes = new byte[1024];
        int length;
        while ((length = in.read(bytes)) >= 0) {
            out.write(bytes, 0, length);
        }

        out.write(4024);

        in.close();
        out.close();
    }
}

теперь это метод второго класса для проверки количества файлов, записанных в папке

private File[] files;
private File[] zipExtracts;

// location of the tempfolder
tempFolder = new File(RawZipFileHandler.tempRepo);
files = tempFolder.listFiles();

public void checkNumberOfFiles() throws Exception {
    Util.out("will check number of files");
    // check the number of documents on the tempfile folder
    if (files.length != 8) {
        throw new Exception ("Number of files expected not met. Expected is 8 got " + files.length);
    } 
}

комментарии для моего не очень красивого кода также приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...