无法删除一些文件JAVA

时间:2016-06-20 07:16:57

标签: java multithreading file

我正在编写一个程序,使用线程将包含zip代码的行数过滤到相应的单独zip文件中。因为我正在处理数百万行创建OutputStream的新对象,并且每次关闭它都是不可行的。因此,我为每个邮政编码创建了一个哈希,并继续写入它。在完成代码之后,我完成了关闭每个流的每个Hash迭代。 现在的问题是一些文件(每次运行不同)仍然抛出AccessDeniedException

我还尝试删除它之前设置setWritable(true),当我调用file.delete()时它返回true,但它返回true但文件未被删除。

任何帮助都会受到欢迎。

用于写入文件

private synchronized void write(String file, StringJoiner joiner) throws Exception {
    OutputStream out = zipOutStreamMap.get(file);
    if (out == null) {
        out = Files.newOutputStream(Paths.get(file), CREATE, APPEND);
        zipOutStreamMap.put(zip, out);
    }
    out.write((joiner.toString() + System.getProperty("line.separator")).getBytes());
    out.flush();
}

用于关闭流

for (Map.Entry<String, OutputStream> out : zipOutStreamMap.entrySet()) {
        try {
            if (out.getValue() != null) {
                out.getValue().close();
                File zipFile = new File(out.getKey());
                System.out.println(out.getKey() + " " + zipFile.setWritable(true));
                System.out.println(zipFile.delete());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

使用线程如下

try {
            Path file = Paths.get(inputProperty.inputFilePath);
            if (!(new File(outputPath)).exists()) {
                (new File(outputPath)).mkdir();
            }
            Stream<String> lines = Files.lines(file, StandardCharsets.UTF_8);
            for (String line : (Iterable<String>) lines::iterator) {
                synchronized (this) {
                     pool.execute(new ZipWriter(line, inputProperty, outputPath));                      
                }
            }
            lines.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        pool.shutdown();
        while (!pool.isTerminated()) {
            Thread.sleep(100);
        }

0 个答案:

没有答案