java - 将文件写入特定目录

标签 java file-writing

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

 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 block 将显示消息 Can not write to "C:\Users\ALLEN\workspace32bit\RETRIEVE_CHECKER1\RETRIEVE_CHECKED1"+ nameProve + ".txt ”

有人可以给我一些关于如何解决这个错误的建议吗?谢谢!

最佳答案

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

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

现在您尝试使用用户 Bob 运行您的程序谁只能访问他自己的目录C:\Users\Bob并尝试写信给ALLEN自己的目录。所以你会得到一个 IOException告诉你access denied这很好!

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

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

最简单的方法是使用以下内容并使用当前的 working directory

String employee = "RETRIEVE_CHECKER1\\RETRIEVE_CHECKED1" + nameProve + ".txt";

您需要创建目录RETRIEVE_CHECKER1可以在运行程序的位置手动操作,或者更好的是在程序中使用 File#mkdir并像这样使用它:

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

关于java - 将文件写入特定目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26253050/

相关文章:

java - Hibernate原生查询返回List对象列表

java - 为什么在 Java 中将文件读入内存需要 4 倍的内存?

rust - 如何将十六进制数字而不是&[u8]写入文件

c# - 我如何重写文件而不是使用 StreamWriter 和文件流附加

java - IntelliJ 不刷新文件

java - 如何将参数传递给 AWS Lambda 函数

java - 在 Maven 存储库中查找 Oracle JDBC 驱动程序

python - 如何在Python中以特定的输出格式将矩阵(从一个文件读取)写入另一个csv文件

java - 使用 Apache Camel 事务时如何回滚文件写入?

python - 将列表变量写入文件