代码如下:
// 创建路径名
String path = new SimpleDateFormat("yyyyMMdd").format(new Date());
String dir = "/home/jqgj/srvmgr/servers/gmceip3.7/logs/phoneLogs/"
+ path;
// String dir="D:home/jqgj/srvmgr/servers/gmceip3.7/logs/phoneLogs/"+path;
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
// 创建文件名
String tpmc = context.getLogin().getUser().getName() + "_"
+ format.format(new Date()) + ".zip";
byte[] b = clientLog.getLogData();
File ret = null;
BufferedOutputStream stream = null;
try {
// 创建文件夹
ret = new File(dir,tpmc);
ret.setWritable(true, false);
if (!ret.getParentFile().exists()) {
ret.getParentFile().mkdirs();
}
/*// 创建文件
File filename = new File(tpmc);
filename.setWritable(true, false);
if (!filename.exists()) {
filename.createNewFile();
}*/
FileOutputStream fstream = new FileOutputStream(ret);
stream = new BufferedOutputStream(fstream);
stream.write(b);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在windows环境下本地测试 没有问题,但是部署到服务器上面以后会报错,说
java.io.FileNotFoundException: /home/jqgj/srvmgr/servers/gmceip3.7/logs/phoneLogs/20150212/18612_20150212144736.zip (No such file or directory)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
at com.jqyd.mobile.service.impl.clientlog.ClientLogService.addClientLog(ClientLogService.java:71)
这里的71行是指 FileOutputStream fstream = new FileOutputStream(ret);
大家指点下问题出在哪里,本人对linux不是特别熟悉。
------解决思路----------------------
建议:
1)有可能是路径的问题
【String dir = "/home/jqgj/srvmgr/servers/gmceip3.7/logs/phoneLogs/"】改为
【String dir = "./home/jqgj/srvmgr/servers/gmceip3.7/logs/phoneLogs/"】试试
就是在路径的最前面加一个半角的点,这种写法应该是Windows和Linux共同认识的
2)有可能是权限的问题
最好用telnet远程登录到服务器上,试试在程序指定的那个目录是否有创建文件的权限
执行的命令类似有
【ls -l】输出类似drwxr-xr-x+这样的东东,r是可读,w是可写,剩下的自己【man ls】一下,或者百度一下
权限不够的话执行【chmod】改权限(一般得和系统管理员请示一下,别成为以后攻击的对象)
用【mkdir 路径名】看能不能创建路径的办法也能简单的知道权限是否够用
3)上面的方法都不行的时候,试着把log输出的路径改的简单一些,先判断出来到底是哪里的问题,然后再着手解决