mkdirs不在Windows 7中工作

时间:2011-11-24 13:23:02

标签: java mkdirs

我制作了一个小型的Java应用程序,可以将目录从CD复制到HD。我使用Windows Vista制作了这个程序,但是当它在Windows 7中运行时,它失败了。

主要问题是需要创建Program Files文件夹中的文件夹。

我使用了DestinationFolder.mkdirs(),但创建失败

这是java代码:

public void Install_App()
{
    File srcFolder = new File(System.getProperty("user.dir") + "\\WINDOWS");
    File destFolder = new File("C:\\Program Files\\test1\\test2\\");
    if (srcFolder.exists())
    {
        try{
            if(!destFolder.exists())
        {
            destFolder.mkdirs();
        }
            copyFolder(srcFolder,destFolder,1);
        }catch(IOException e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, e.toString());
            error=true;
            System.exit(0);
            }
    } else 
    {
        JOptionPane.showMessageDialog(null, "Error. Source Directory doesn't exist.");
        error=true;
    };
} 

...然后有一个copyfolder函数,用inputstream和outputstream复制文件。

问题是永远不会创建该文件夹。我的登录用户是管理员。正如我所说,它在Vista中有效。

请问你能帮帮我吗?

感谢。

问题是我在java中创建了这个应用程序,以便在Windows和Mac中运行它。 在Windows中,它应该使用和autorun.inf自动运行,如下所示:

[autorun]
OPEN=java_app.bat

然后这个蝙蝠将运行:

@echo off
start javaw -jar "java_app.jar"
EXIT

那么如何修改它以自动运行它? 这个java应用程序的主要思想是简化安装过程。无论您使用哪种操作系统,都可以使用外部应用程序。如果我不得不要求用户以管理员身份运行它,那么它将失去意义(使用简单)。

3 个答案:

答案 0 :(得分:1)

我猜您正在以常规用户身份运行代码。

默认情况下,在Windows 7下以UAC阻止以普通用户身份写入Program Files目录。这就是您的Java代码无法创建目录的原因。

尝试从特权shell运行Java代码。您可以Start > [type cmd] > [right-click on 'cmd.exe' and select "Run as administrator"]获得一个。现在,从管理员命令提示符处使用java -jarjava -classpath运行已编译的代码。它现在应该工作。

自动启动UAC提示:

您需要创建清单文件,详见[1]和[2],以便让Windows / UAC知道您的程序需要提升权限。

同时检查名为elevate的[3]实用程序,它会将您的程序作为子进程生成,同时处理所有来自父(elevate)程序本身的UAC权限请求。

[1] [http://msdn.microsoft.com/en-us/library/aa511445.aspx][2] 
[2] [http://msdn.microsoft.com/en-us/library/bb756929.aspx][3]
[3] [http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/03/27/elevate-a-process-at-the-command-line-in-vista.aspx][4]

答案 1 :(得分:0)

这是所有权限问题。我的机器上有同样的问题。你的java代码没有错。我尝试使用命令行创建文件夹并获得“拒绝访问”。

C:\Users\alexr>mkdir "C:\Program Files\mytest"
Access is denied.

因此,解决方案是在其他位置创建文件夹还是以管理员身份运行。正如@Alex K. aready所说,请参阅这篇文章以了解如何获得此类权限。

Windows 7 Create Folder in "Program Files" failing in C# code even thought I have admin rights!

答案 2 :(得分:0)

您没有在Program Files中创建目录的适当权限。您必须以管理员权限启动应用程序。

要学习的一件重要事情是,在开发应用程序时,不应该编写它们来保存/修改Program Files内的数据;相反,他们应该写AppData我们的My Documents

自Windows Vista以来,Program Files中的修改文件已被严重弃用,甚至更早。您应该从一开始就尝试遵循此规则,否则如果您想要在线发布它,则意味着要重写整个应用程序。