使用Java';的文件类,以及如何获得正确的访问权限来创建文件

使用Java';的文件类,以及如何获得正确的访问权限来创建文件,java,Java,下面是我编写的一个房屋清理函数的代码,该函数应该检查文件是否存在,如果不存在,则创建文件并向其中添加一些数据。 但是,当我使用file.canRead()和file.canWrite()检查我是否具有读写权限时,如果选中,这两个选项都返回false,但是程序应该可以访问指定的文件路径 public void HouseCleaning() { //inform the user that the file is not available System.out.println(

下面是我编写的一个房屋清理函数的代码,该函数应该检查文件是否存在,如果不存在,则创建文件并向其中添加一些数据。 但是,当我使用
file.canRead()
file.canWrite()
检查我是否具有读写权限时,如果选中,这两个选项都返回false,但是程序应该可以访问指定的文件路径

public void HouseCleaning()
{
    //inform the user that the file is not available 
    System.out.println("According the the checks we have run, the current system you are on we do not have the required files set up");
    System.out.println("...");
    //create info.txt
    try
    {
        File file = new File("C:\\GameCounter\\info.txt");
        System.out.println(file.canRead());
        System.out.println(file.canWrite());
        if(file.canRead() && file.canWrite())
        {

            //then we can create the file
            System.out.println("we can do this");
            if(!file.exists())
            {
                //file does not exist
                if(file.createNewFile())
                {
                    //file has been created
                    System.out.println("File has been successfully created!");
                    PrintWriter writer = new PrintWriter("C:\\GameCounter\\info.txt", "UTF-8");
                    writer.println("Info File:");
                    writer.flush();
                    writer.close();
                }
                else
                {
                    //file has not been created!
                    System.out.println("for some reason the file cannot be created!");
                }

            }
            else
            {
                //file must already exist? so check for other required ones!
            }
        }
        else
        {
            System.out.println("we require extre permissions!");
        }





    }
    catch(Exception e)
    {
        //error has been thrown
        System.out.println(e);

    }
}
所以我的问题是首先,理论上,如果下面的代码是正确的,那么它就是硬盘本身的权限?如果代码不正确,请纠正我。
非常感谢您在这方面提供的帮助。

如果文件不存在,方法
可以读取
可以写入
返回
false

引用文件(可阅读):

返回: 当且仅当此抽象路径名指定的文件存在且可由应用程序读取时,为true;否则就错了

和(可以写):

返回: 当且仅当文件系统实际包含由该抽象路径名表示的文件且允许应用程序写入该文件时,为true;否则就错了


如果文件不存在,
canRead
canWrite
方法返回
false

引用文件(可阅读):

返回: 当且仅当此抽象路径名指定的文件存在且可由应用程序读取时,为true;否则就错了

和(可以写):

返回: 当且仅当文件系统实际包含由该抽象路径名表示的文件且允许应用程序写入该文件时,为true;否则就错了


如果文件不存在,
canRead
canWrite
方法返回
false

引用文件(可阅读):

返回: 当且仅当此抽象路径名指定的文件存在且可由应用程序读取时,为true;否则就错了

和(可以写):

返回: 当且仅当文件系统实际包含由该抽象路径名表示的文件且允许应用程序写入该文件时,为true;否则就错了


如果文件不存在,
canRead
canWrite
方法返回
false

引用文件(可阅读):

返回: 当且仅当此抽象路径名指定的文件存在且可由应用程序读取时,为true;否则就错了

和(可以写):

返回: 当且仅当文件系统实际包含由该抽象路径名表示的文件且允许应用程序写入该文件时,为true;否则就错了


file.canRead()file.canWrite()
返回false的原因很可能是因为您尚未创建这些文件

Java文档 public boolean canRead()测试应用程序是否可以 读取此抽象路径名表示的文件

首先创建文件时,方法调用返回true。
请记住,文件是系统文件的表示形式,仅创建文件对象的实例不会创建文件

文件.canRead()文件.canWrite()返回false的原因很可能是因为您尚未创建文件

Java文档 public boolean canRead()测试应用程序是否可以 读取此抽象路径名表示的文件

首先创建文件时,方法调用返回true。
请记住,文件是系统文件的表示形式,仅创建文件对象的实例不会创建文件

文件.canRead()文件.canWrite()返回false的原因很可能是因为您尚未创建文件

Java文档 public boolean canRead()测试应用程序是否可以 读取此抽象路径名表示的文件

首先创建文件时,方法调用返回true。
请记住,文件是系统文件的表示形式,仅创建文件对象的实例不会创建文件

文件.canRead()文件.canWrite()返回false的原因很可能是因为您尚未创建文件

Java文档 public boolean canRead()测试应用程序是否可以 读取此抽象路径名表示的文件

首先创建文件时,方法调用返回true。
请记住,文件是系统文件的一种表示形式,仅创建文件对象的实例不会创建文件

我建议您更改程序并使用Java异常处理所提供的优势

private final static String COUNTER = "C:\\GameCounter\\info.txt";

    public static void main(String[] args) {
        File file = new File(COUNTER);
        if (!file.exists()) {
            try {
                PrintWriter writer = new PrintWriter(COUNTER, "UTF-8");
                writer.println("Info File:");
                writer.flush();
                writer.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }

        /// ... more to come
    }
这是一个短得多,你必须照顾例外无论如何。如果文件无法写入(在我的测试中,我只是创建了它并分配了readonly属性),您将收到相应的异常:

java.io.FileNotFoundException: C:\GameCounter\info.txt (Access denied)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
    at java.io.PrintWriter.<init>(PrintWriter.java:192)
    at java.io.PrintWriter.<init>(PrintWriter.java:232)
    at xyz.main(xyz.java:12)
java.io.FileNotFoundException:C:\GameCounter\info.txt(访问被拒绝)
位于java.io.FileOutputStream.open0(本机方法)
在java.io.FileOutputStream.open(FileOutputStream.java:270)
位于java.io.FileOutputStream。(FileOutputStream.java:213)
位于java.io.FileOutputStream。(FileOutputStream.java:162)
位于java.io.PrintWriter(PrintWriter.java:192)
在java.io.PrintWriter。(PrintWriter.java:232)
在xyz.main(xyz.java:12)

在我的示例中,我只将异常转储到屏幕上。在现实生活中,您需要对异常做出反应,并可能重新抛出您自己定义的异常。

我建议您更改程序,并使用Java异常处理所提供的优势

private final static String COUNTER = "C:\\GameCounter\\info.txt";

    public static void main(String[] args) {
        File file = new File(COUNTER);
        if (!file.exists()) {
            try {
                PrintWriter writer = new PrintWriter(COUNTER, "UTF-8");
                writer.println("Info File:");
                writer.flush();
                writer.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }

        /// ... more to come
    }
这是一个短得多,你必须照顾例外无论如何。如果文件无法写入(在我的测试中,我只是创建了它并分配了readonly属性),您将收到相应的异常:

java.io.FileNotFoundException: C:\GameCounter\info.txt (Access denied)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
    at java.io.PrintWriter.<init>(PrintWriter.java:192)
    at java.io.PrintWriter.<init>(PrintWriter.java:232)
    at xyz.main(xyz.java:12)
java.io.FileNotFou