java.sql.SQLException: Can't create/write to file '/root/apache-tomcat-7.0.42/webapps/AnationtSystem

java.sql.SQLException: Can’t get stat of ‘/root/apache-tomcat-7.0.42/webapps/AnationtSystem/upload/20180720093527_general.txt’ (Errcode: 13)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1467)
at com.automatic.Dao.GeneralbackupRestoreDao.generaltemporaryReduction(GeneralbackupRestoreDao.java:103)
at com.automatic.action.BackUpRestoreAction.insertIntoGeneralTempTable(BackUpRestoreAction.java:427)
at com.automatic.action.BackUpRestoreAction.generalbackupRestore(BackUpRestoreAction.java:260)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:891)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1293)
at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)
at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117)
at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108)
at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1369)
at ognl.ASTMethod.getValueBody(ASTMethod.java:90)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at ognl.SimpleNode.getValue(SimpleNode.java:258)
at ognl.Ognl.getValue(Ognl.java:494)
at ognl.Ognl.getValue(Ognl.java:458)
at com.opensymphony.xwork2.ognl.OgnlUtil$2.execute(OgnlUtil.java:309)
at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:340)
at com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:307)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:423)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:287)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:250)
at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

CHARACTER SET
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:253)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:564)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocolAbstractConnectionHandler.process(AbstractProtocol.java:589)atorg.apache.tomcat.util.net.JIoEndpointAbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpointAbstractConnectionHandler.process(AbstractProtocol.java:589)atorg.apache.tomcat.util.net.JIoEndpointSocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

出现这个错误是因为指定文件夹没有文件写入权限,为文件夹设置好写入权限即可解决错误。

<think>好的,我现在需要解决用户遇到的Java程序中SQL异常,提示无法创建或写入文件的问题,具体错误是java.sql.SQLException: cannot create/write file, OS errno 2 no such file or directory。首先,我得分析可能的原因,然后逐步排除。 首先,错误信息中的“OS errno 2”对应的是系统错误,也就是ENOENT,表示文件或目录不存在。可能的情况包括指定的路径不存在、权限不足,或者程序没有写入权限的目标位置。用户可能在连接数据库时配置了某个文件输出路径,比如导出数据或日志文件,而这个路径不存在或者不可写。 接下来,我要考虑可能的解决方案。第一步应该是检查文件路径是否正确。用户可能在代码或配置文件中指定了一个不存在的目录,比如/tmp/export.csv,如果/tmp下没有相应的子目录,就会报错。需要确认路径是否存在,包括所有父目录是否存在。 然后,权限问题也是一个常见原因。即使路径存在,程序可能没有写入权限。这时候需要检查目录的权限设置,使用ls -l或者文件管理器查看目录权限,确保运行Java程序的用户有写权限。可能需要用chmod或chown调整权限。 另外,有时候路径中的父目录可能缺失。比如,配置的路径是/var/data/exports/result.csv,但/var/data/exports目录不存在。这时候需要手动创建目录,并确保权限正确。 还有可能是文件系统满或者磁盘空间不足,导致无法写入。虽然错误号2通常指路径问题,但也不排除需要检查磁盘空间的情况,可以用df -h命令查看。 另外,如果用户使用的是相对路径,比如导出到“output/data.csv”,需要确定当前工作目录是否正确。相对路径的基准目录可能因执行环境不同而变化,比如在IDE中运行和通过服务启动时路径可能不同。建议使用绝对路径来避免混淆。 还有可能涉及安全策略,比如SELinux或AppArmor限制了程序的写入权限。这时候需要检查安全策略的日志,或者临时禁用这些安全模块来测试是否是它们的问题。 此外,如果用户使用的是嵌入式数据库如H2或HSQLDB,可能在配置连接URL时指定的文件路径有误,比如jdbc:h2:file:/data/mydb,但/data/mydb目录不存在。需要检查数据库连接的URL是否正确,路径是否有效。 还需要考虑程序运行的用户身份。例如,在Linux系统中,如果Java程序以服务形式运行(如Tomcat),可能使用特定的用户(如tomcat用户),而该用户对目标目录没有权限。这时候需要更改目录所有者或权限,允许该用户写入。 最后,可能还有文件锁的问题,比如另一个进程正在占用该文件,导致无法写入。但错误号2更倾向于路径不存在,所以这种情况可能性较低,但也可以检查是否有冲突的进程。 总结下来,解决步骤应该是:检查路径是否存在,确认权限,确保目录结构正确,使用绝对路径,检查磁盘空间,验证运行用户权限,检查安全策略,以及确认数据库配置是否正确。用户需要根据具体情况逐一排查,确保所有环节都正确无误。</think>### Java程序中SQL异常无法创建/写入文件的解决方法 当Java程序抛出`java.sql.SQLException: cannot create/write file, OS errno 2`错误时,通常是由于文件路径或权限问题导致的。以下是逐步排查和解决方案: #### 1. **检查文件路径是否存在** - **问题**:代码或配置中指定的文件路径不存在,例如导出数据到`/tmp/export.csv`,但`/tmp`目录下缺少子目录。 - **解决**: 1. 确认路径中的所有父目录是否存在。例如,若路径为`/data/output/file.txt`,需确保`/data/output`目录存在。 2. 使用绝对路径而非相对路径。相对路径可能因运行环境(如IDE、服务器)不同而失效[^1]。 ```java // 示例:使用绝对路径(需替换为实际路径) String filePath = "/var/data/export.csv"; ``` #### 2. **验证目录写入权限** - **问题**:程序对目标目录无写入权限。 - **解决**: 1. 在终端中检查目录权限: ```bash ls -ld /path/to/directory ``` 输出类似`drwxr-xr-x`,需确保运行程序的用户有写权限(`w`)。 2. 修改权限(示例): ```bash chmod 755 /path/to/directory # 赋予所有者读写执行权限,其他用户读和执行 chown java_user:java_group /path/to/directory # 修改目录所有者 ``` #### 3. **处理父目录缺失问题** - **问题**:路径中的父目录未创建(如配置为`/var/data/exports/result.csv`,但`exports`目录不存在)。 - **解决**: 1. 手动创建缺失的目录: ```bash mkdir -p /var/data/exports ``` 2.Java代码中动态创建目录: ```java File dir = new File("/var/data/exports"); if (!dir.exists()) { dir.mkdirs(); // 创建多级目录 } ``` #### 4. **检查磁盘空间与文件锁** - **问题**:磁盘空间不足或文件被其他进程占用。 - **解决**: 1. 使用`df -h`查看磁盘剩余空间。 2. 终止占用文件的进程,或修改文件名避免冲突。 #### 5. **数据库配置验证** - **问题**:数据库连接URL指定了无效路径(如嵌入式数据库H2、HSQLDB)。 - **解决**: 1. 检查JDBC连接字符串,例如: ```java // H2数据库示例:确保路径可写 String url = "jdbc:h2:file:/opt/data/mydb"; ``` 2. 确认路径存在且可写。 #### 6. **安全策略限制** - **问题**:SELinux或AppArmor阻止写入操作。 - **解决**: 1. 临时禁用SELinux测试(仅限调试): ```bash setenforce 0 ``` 2. 查看安全日志(如`/var/log/audit/audit.log`)并调整策略。 #### 7. **以正确用户身份运行程序** - **问题**:服务(如Tomcat)以低权限用户运行,无法写入目标目录。 - **解决**: 1. 修改服务配置,指定高权限用户。 2. 或调整目录权限: ```bash chown -R tomcat:tomcat /path/to/directory ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值