Java 将文件写入特定目录

Java 将文件写入特定目录,java,file-writing,Java,File Writing,我创建了一个简单的程序,可以使用以下代码编写一个带有目录的文件: String nameProve = nameField.getText(); String employee = ("C:\\Users\\ALLEN\\workspace32bit\\RETRIEVE_CHECKER1\\RETRIEVE_CHECKED1" + nameProve + ".txt"); PrintWriter outputStream1 = null; try { outputStrea

我创建了一个简单的程序,可以使用以下代码编写一个带有目录的文件:

 String nameProve = nameField.getText();

 String employee = ("C:\\Users\\ALLEN\\workspace32bit\\RETRIEVE_CHECKER1\\RETRIEVE_CHECKED1" + nameProve + ".txt");

 PrintWriter outputStream1 = null;
 try
 {
    outputStream1 = new PrintWriter(employeeName);
 }
 catch(Exception e)
 {
    JOptionPane.showMessageDialog(null, "Can not write to " + employeeName);
    System.exit(0);
 }

 outputStream1.println("Employee Retrieve Executed");
 outputStream1.close();
我已经将我的代码导出到一个.jar文件中,如果我在开发程序时在计算机上执行它,我的代码就可以正常工作,但是当我将jar文件复制到其他计算机上时,我还创建了forlder(手动)这与我的代码中的目录对应。我的程序不工作,我的catch块将显示消息无法写入“C:\Users\ALLEN\workspace32bit\RETRIEVE\u CHECKER1\RETRIEVE\u CHECKED1”+nameProve+“.txt”


有谁能给我一些关于如何解决这个错误的建议吗?谢谢

显然,您是计算机上的用户
ALLEN
,并以该用户的身份运行该程序,因此一切正常,因为您是目录
C:\Users\ALLEN
的所有者

然后将jar复制到另一台机器上,其中用户
ALLEN
不存在,您以另一个用户的身份登录,比如说他的名字是
Bob
,并在
C:\Users
上创建该目录。您可能已经注意到,当用户
Bob
windows警告您需要管理员权限才能完成此操作时,您需要创建该目录

现在,您尝试使用用户
Bob
运行您的程序,该用户只能访问自己的目录
C:\Users\Bob
,并尝试写入ALLEN自己的目录。所以发生的事情是,你得到一个
IOException
告诉你
访问被拒绝
,这很好

您不应该尝试向其他用户写入私有目录,这是一个安全问题

在处理文件系统的代码中,永远不要硬编码绝对路径,始终使用相对路径,或者如果需要定义一个目录,其中包含程序所需的所有数据,则将ist作为参数传递

最简单的方法是使用以下命令并使用当前命令

您需要在运行程序的位置手动创建目录
RETRIEVE_CHECKER1
,或者在程序中更好地使用并如下使用:

File employee = new File(dir, "RETRIEVE_CHECKED1" + nameProve + ".txt");
PrintWriter outputStream1 = new PrintWriter(employeeName);

您捕获的异常将具有所有详细信息,如访问被拒绝、目录不存在等。当前,您在捕获异常时丢失了异常数据(消息、堆栈跟踪)

请做一些类似的事情

  • 不要只捕获java.lang.Exception。这太宽-将捕获可能的NullPointerException并显示误导性消息“Can not write to”。请仅捕获特定异常-实际上从try块抛出的异常。在您的情况下,这将是java.io.FileNotFoundException
  • 不要泄露异常详细信息。将其打印到标准错误日志,或者更好地使用登录框架
解决这些问题的捕获块:

catch(FileNotFoundException e) {
    JOptionPane.showMessageDialog(null, e.getMessage());
    e.printStackTrace();
}

能否提供收到的异常?无法写入C:\Users\ALLEN\workspace32bit\RETRIEVE\u CHECKER1\RETRIEVE\u CHECKED1Edward.txt“在我点击Ok后,程序退出,写入方法没有执行。在
RETRIEVE_CHECKED1
之后和
Edward.txt
之前应该有一个斜杠,否则它找不到位置。谢谢。。。。。。不熟悉计算机名称和安全问题。这很有帮助。我确实尝试过使用相同目录路径的读取方法,我在运行已导出到jar文件的程序时手动将.txt文件复制到另一个站点。它可以工作。它读取文件,我使用相同的文件目录,有什么解释为什么我的阅读方法有效而不是我的写作方法吗?@user3796035计算机上的用户被授予对不同资源的访问权限,最常见的权限是
,和
执行
,前两个是显而易见的,第三个是用于运行可执行文件。如果在“安全”选项卡中查看可以读取的文件或目录的属性,您将找到可以访问该文件的用户,通过选择一个用户,您将看到授予他哪些权限。您可以在
java
中找到有关此主题的详细信息。@user3796035您可以检查类及其方法的权限,以及。PS:请随意投票和/或接受任何有用的答案!
catch(FileNotFoundException e) {
    JOptionPane.showMessageDialog(null, e.getMessage());
    e.printStackTrace();
}