我创建了一个简单的程序,使用以下代码编写带有目录的文件:
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 “
有人可以就如何解决这个错误给我一些建议吗?谢谢!
答案 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)。
请执行类似
的操作阻止解决这些问题的方法:
catch(FileNotFoundException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
e.printStackTrace();
}