gpt4 book ai didi

java - 使用 FileOutputStream 时出现 FileNotFoundException

转载 作者:行者123 更新时间:2023-12-01 12:46:56 25 4
gpt4 key购买 nike

我需要通过这段代码提取tar文件。但是当我使用 FileOutputStream(outputFile); 时出现此错误;

     " java.io.FileNotFoundException: D:\TestFile\1.png (Access is denied)"

输入是来自驱动器 D:/testFile 的 1.tar 文件并解压到同一文件夹

我尝试通过outputFile.getCanonicalFile检查输出文件的路径,但没问题!怎么了?

   public class DecompressTarFile {

public ArrayList<File> getTarFileExtracted() {
return tarFileExtracted;
}

public ArrayList<File> tarFileExtracted = new ArrayList<File>();

public DecompressTarFile(File inputFile, File outputDir) throws FileNotFoundException, ArchiveException, IOException {

System.out.println("Untaring " + inputFile.getAbsolutePath() + " to dir " + outputDir.getAbsolutePath() + ".");
InputStream inputStream = new FileInputStream(inputFile);
TarArchiveInputStream tarStream = (TarArchiveInputStream) new ArchiveStreamFactory().createArchiveInputStream("tar", inputStream);
TarArchiveEntry tarEntry = null;
while ((tarEntry = (TarArchiveEntry) tarStream.getNextEntry()) != null) {
File outputFile = new File(outputDir, tarEntry.getName());
System.out.println("Attempting to write output directory " + outputFile.getAbsolutePath());
if (!outputFile.exists()) {
System.out.println("Attempting to create output directory " + outputFile.getAbsolutePath());
if (!outputFile.mkdirs()) {
throw new IllegalStateException(String.format("Couldn't create directory %s.", outputFile.getAbsolutePath()));
}

} else {
System.out.println("Create output file " + outputFile.getAbsolutePath());

OutputStream outputFileStream = new FileOutputStream(outputFile);
IOUtils.copy(tarStream, outputFileStream);
outputFileStream.close();

}
tarFileExtracted.add(outputFile);
}
tarStream.close();

}

}

并由主类调用

 static File tarFileInput = new File("D:/TestFile/haha.tar");
static File tarPathFileOutput = new File("D:/TestFile");

public static void main(String[] args) throws ArchiveException, IOException {

decomp = new DecompressTarFile(tarFileInput, tarPathFileOutput);
//listOutput = decomp.getTarFileExtracted();

}

这段代码的结果

   run:
Untaring D:\TestFile\haha.tar to dir D:\TestFile.
Attempting to write output directory D:\TestFile\1.png
Create output file D:\TestFile\1.png
Exception in thread "main" java.io.FileNotFoundException: D:\TestFile\1.png (Access is denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
at com.service..TarFile.DecompressTarFile.<init>(DecompressTarFile.java:53)
at com.service..TarFile.MainForTest.main(MainForTest.java:28)

Java 结果:1

最佳答案

这就是问题:

Attempting to write output directory D:\TestFile\1.png

您已将目标文件名创建为目录。您需要将“我需要存在的目录”和“我想要写入的文件”分开。例如:

File outputFile = new File(outputDir, tarEntry.getName());
File outputDirectory = outputFile.getParent();
if (!outputDirectory.exists()) {
// Try to create the directory
}

哦,还有一个循环条件:

while (tarEntry != null)

...但您没有更改循环中 tarEntry 的值...

关于java - 使用 FileOutputStream 时出现 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24605408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com