gpt4 book ai didi

java - FileOutputStream 打开时发生 FileNotFoundException

转载 作者:行者123 更新时间:2023-12-02 06:21:53 24 4
gpt4 key购买 nike

当我尝试创建 FileOutputStream 时遇到 FileNotFoundException。根据 file.exists,该文件确实存在。我已经尝试过诸如 file.mkdir(s) 之类的一切...我在 Mac 上,使用 gauva。文件输入为 ''

java.io.FileNotFoundException: /Users/big_Xplosion/mods/Blaze-Installer/installer/test
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:194)
at com.google.common.io.Files$FileByteSink.openStream(Files.java:223)
at com.google.common.io.Files$FileByteSink.openStream(Files.java:211)
at com.google.common.io.ByteSource.copyTo(ByteSource.java:203)
at com.google.common.io.Files.copy(Files.java:382)
at com.big_Xplosion.blazeInstaller.util.DownloadUtil.downloadFile(DownloadUtil.java:80)
at com.big_Xplosion.blazeInstaller.action.MCPInstall.downloadMCP(MCPInstall.java:78)
at com.big_Xplosion.blazeInstaller.action.MCPInstall.install(MCPInstall.java:30)
at com.big_Xplosion.blazeInstaller.util.InstallType.install(InstallType.java:37)
at com.big_Xplosion.blazeInstaller.BlazeInstaller.handleOptions(BlazeInstaller.java:51)
at com.big_Xplosion.blazeInstaller.BlazeInstaller.main(BlazeInstaller.java:26)

主类中的代码。

File file = mcpSpec.value(options); //the file input given is 'test'

try
{
InstallType.MCP.install(file.getAbsoluteFile());
}
catch (IOException e)
{
e.printStackTrace();
}

执行代码mcpTarget文件必须是一个目录

public boolean install(File mcpTarget) throws IOException
{
mcpTarget.mkdirs();

if (isMCPInstalled(mcpTarget))
System.out.println(String.format("MCP is already installed in %s, skipped download and extraction.", mcpTarget));
else if (isMCPDownloaded(mcpTarget))
{
if (!unpackMCPZip(mcpTarget))
return false;
}
else
{
if (!downloadMCP(mcpTarget))
return false;

if (!unpackMCPZip(mcpTarget))
return false;
}

System.out.println("Successfully downloaded and unpacked MCP");

return false;
}

下载MCP方法

public boolean downloadMCP(File targetFile)
{
String mcpURL = new UnresolvedString(LibURL.MCP_DOWNLOAD_URL, new VersionResolver()).call();

if (!DownloadUtil.downloadFile("MCP", targetFile, mcpURL))
{
System.out.println("Failed to download MCP, please try again and if it still doesn't work contact a dev.");
return false;
}

return true;
}

和 DownloadUtil.DownloadFile 方法

public static boolean downloadFile(String name, File path, String downloadUrl)
{
System.out.println(String.format("Attempt at downloading file: %s", name));

try
{
URL url = new URL(downloadUrl);
final URLConnection connection = url.openConnection();
connection.setConnectTimeout(6000);
connection.setReadTimeout(6000);

InputSupplier<InputStream> urlSupplier = new InputSupplier<InputStream>()
{
@Override
public InputStream getInput() throws IOException
{
return connection.getInputStream();
}
};

Files.copy(urlSupplier, path);

return true;
}
catch (Exception e)
{
e.printStackTrace();

return false;
}
}

最佳答案

mcpTarget.mkdirs();
mcpTarget.mkdir();

这就是问题所在。您正在指定文件处创建文件夹。将其替换为

mcpTarget.getParentFile().mkdirs();

(或者,由于您使用 Guava,请使用: Files.createParentDirs(mcpTarget) )

此外,后者是前者的子集,因此您永远不需要调用这两个 mkdir 方法。

关于java - FileOutputStream 打开时发生 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20938016/

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