将文件写入特定目录

时间:2014-10-08 09:05:48

标签: 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块将显示消息无法写入“C:\ Users \ ALLEN \ workspace32bit \ _RRRIEVE_CHECKER1 \ RETRIEVE_CHECKED1”+ nameProve +“。txt “

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

2 个答案:

答案 0 :(得分:0)

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

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

现在,您尝试使用只能访问自己的目录Bob的用户Bob来运行您的程序,并尝试写入C:\Users\Bob自己的目录。那么你会得到一个ALLEN告诉你IOException这是好事啊!

你不应该向其他用户写私人指令,这是一个安全问题。

在处理文件系统的代码中,永远不要硬代码绝对路径,总是使用相对路径,或者如果你需要定义一个需要你编程所需的所有数据的目标,那么将ist作为参数。

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

access denied

您需要在运行程序的位置手动创建目录String employee = "RETRIEVE_CHECKER1\\RETRIEVE_CHECKED1" + nameProve + ".txt"; ,或者使用File#mkdir在程序中更好地创建目录RETRIEVE_CHECKER1并使用它:

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

答案 1 :(得分:0)

您捕获的异常将包含所有详细信息 - 例如拒绝访问,目录不存在等。当前您在捕获异常数据时会丢失异常数据(message,stacktrace)。

请执行类似

的操作
  • 不要只捕获 java.lang.Exception 。这太宽了 - 会抓住可能的 NullPointerException 并出现误导消息'"'无法写入'。仅捕获特定异常 - 实际上从try块抛出的异常。在你的情况下,那将是 java.io.FileNotFoundException
  • 不要忽略异常细节。将其打印到标准错误日志,甚至更好地使用日志框架

阻止解决这些问题的方法:

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