一个奇怪的Java问题,高手请进来看看,谢谢。

airpor 2008-11-07 04:30:45
请教各位达人一个问题。
有一段从文件恢复数据进SQL Server的程序。一般情况下都是正常的,但在偶尔一些环境的机器上,会出现如下的错误。

java.io.IOException: Bad file descriptor
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:194)
at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:408)
at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:450)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:182)
at sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:131)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:117)
at java.io.InputStreamReader.read(InputStreamReader.java:151)

问题怪就怪在绝大多数的环境,机器都是好的,只有一小部分机器,偶尔出现这种情况。跟代码发现是下面红色字体报的错,还有大侠知道原因的?谢谢。


private boolean bcpFileToDB(String tablename) {
String execStr = null;
File tmpFile = null;
String tmpData = null;
BufferedReader bufferedReader = null;
Process process = null;
String[] tmp = getDbUserPassWord();
String user = tmp[0];
String password = tmp[1];
try {
StringBuffer buffer = new StringBuffer();
// add for crdcr00162256 备份恢复中增加UEP的表
if (authflag == DB_CAF3GCM_FLAG) {
if (tablename.equalsIgnoreCase("CSP_R_RESASSIGN")
|| tablename.equalsIgnoreCase("CSP_R_AREA")) {
dbName = "uep";
boolean ueprestoreFlag = uepTablenamerestore();
return ueprestoreFlag;
} else
dbName = "CAF3G_CMP_DB";
}
// end
buffer.append("bcp \"").append(dbName).append(".dbo.");
buffer.append(tablename).append("\" in \"");
buffer.append(getBakPath(nodetype)).append(
BAKRES_RESTORE_TMPRESFILE);
buffer.append("\" -c -t\u001B -q -U\"").append(user);
buffer.append("\" -P\"").append(password);
buffer.append("\" -S \"").append(serverIp).append("\" -E");
execStr = buffer.toString();
tmpFile = new File(getBakPath(nodetype) + BAKRES_RESTORE_TMPRESFILE);
if (!tmpFile.isFile()) {
debugPrn.error("error:temp file not exist! " + tablename);
return false;
}
process = Runtime.getRuntime().exec(execStr);
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream()));
while ((tmpData = bufferedReader.readLine()) != null) {
Thread.sleep(20);
if (tmpData.startsWith("Error")) {
excForLog = new Exception(tmpData);
debugPrn.error("error:restore bcp error " + tmpData);
return false;
}
}
return true;
} catch (Exception e) {
excForLog = e;
CmFunction.debugPrint(this.getClass().getName(), e.getMessage(),
CmFunction.INFO);
return false;
} finally {
try {
process = null;
tmpData = null;
tmpFile = null;
if (bufferedReader != null) {
bufferedReader.close();
bufferedReader = null;
}
} catch (IOException ioe) {
debugPrn.error(ioe);
}

}
}
...全文
184 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
airpor 2008-11-08
  • 打赏
  • 举报
回复
不能沉了丫
airpor 2008-11-08
  • 打赏
  • 举报
回复
不能沉了丫
cuijie_cn 2008-11-07
  • 打赏
  • 举报
回复
不知道 :(
airpor 2008-11-07
  • 打赏
  • 举报
回复
JDK的BUG,这个我在网上也搜到了。但奇怪的是,其他很多台机器都是同样的JDK版本,都是JDK1.6的版本。这个版本应该解决这个问题了。
jofy1004 2008-11-07
  • 打赏
  • 举报
回复
错误的文件描述符号··是不是中文的问题啊··乱猜~~
wang511123 2008-11-07
  • 打赏
  • 举报
回复
不会,看高手解答
bushuang 2008-11-07
  • 打赏
  • 举报
回复
http://256.com/gray/docs/misc/java_bad_file_descriptor_close_bug.shtml

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧