IO流读取文章的问题

hz594556878 2013-06-27 12:00:45
我在struts2的一个项目中,需要读取一篇文章,我数据库里面存放的是文章的路径,有以下代码,在j2se里能正确读取出文章,但是放在struts中就不能读取了。而且封装的方法根本就不执行。请问各位大牛这是怎么回事儿
代码:
public String getArticleContent(String path)
{
File file = new File(path);
String read = "";
StringBuilder sb = new StringBuilder();
InputStreamReader isr = null;
BufferedReader br = null;
try
{
isr = new InputStreamReader(new FileInputStream(file));
br = new BufferedReader(isr);
while ((read = br.readLine()) != null)
{
sb.append(read + "\n");
}
} catch (Exception e)
{
} finally
{
if (br != null)
{
try
{
br.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
if (isr != null)
{
try
{
isr.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
return sb.toString();
}


调用该方法的地方,以及前后代码:
if (res != null)
{
if (res.next())
{
title = res.getString("title");
content = getArticleContent(res
.getString("article_content"));
list.add(new ArticleBean(title, content));
System.out.println("文章路径----->>>"
+ res.getString("article_content"));
System.out.println(content);
} else
{
list.add(new ArticleBean("没有文章", null));
}
}
...全文
122 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hz594556878 2013-06-27
  • 打赏
  • 举报
回复
引用 3 楼 oh_Maxy 的回复:
[quote=引用 2 楼 hz594556878 的回复:] [quote=引用 1 楼 oh_Maxy 的回复:] 嗯,有没有报错呢?是路径找不到还是怎么了? 建议将查询出来的字符串路径打印出来调试下,或者debug一步步跟代码,看看有啥问题。
没有报错哦,路径打印出来了的,debug了一下好像这个方法没有执行到。[/quote] 没执行,是不是在执行前做了判断呢?看看判断条件是否有问题,或者少了!之类的[/quote] content = getArticleContent(res.getString("article_content")); 这句代码就是调用那个方法的。可以看出来,没有判断啊。
oh_Maxy 2013-06-27
  • 打赏
  • 举报
回复
引用 2 楼 hz594556878 的回复:
[quote=引用 1 楼 oh_Maxy 的回复:] 嗯,有没有报错呢?是路径找不到还是怎么了? 建议将查询出来的字符串路径打印出来调试下,或者debug一步步跟代码,看看有啥问题。
没有报错哦,路径打印出来了的,debug了一下好像这个方法没有执行到。[/quote] 没执行,是不是在执行前做了判断呢?看看判断条件是否有问题,或者少了!之类的
hz594556878 2013-06-27
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:
嗯,有没有报错呢?是路径找不到还是怎么了? 建议将查询出来的字符串路径打印出来调试下,或者debug一步步跟代码,看看有啥问题。
没有报错哦,路径打印出来了的,debug了一下好像这个方法没有执行到。
oh_Maxy 2013-06-27
  • 打赏
  • 举报
回复
嗯,有没有报错呢?是路径找不到还是怎么了? 建议将查询出来的字符串路径打印出来调试下,或者debug一步步跟代码,看看有啥问题。
oh_Maxy 2013-06-27
  • 打赏
  • 举报
回复
引用 15 楼 hz594556878 的回复:
[quote=引用 14 楼 oh_Maxy 的回复:] [quote=引用 13 楼 hz594556878 的回复:] [quote=引用 12 楼 oh_Maxy 的回复:] File file = new File(System.getProperty("user.dir") + path);
额。还是不行,不过获得文件的绝对路径可以,反正这文章后面也是需要上传到服务器的。所以到时候直接把文章保存的绝对路径给保存在数据库里面就行了。还是谢谢啦。[/quote] 建议存到数据库不要使用绝对路径,可以对路径进行处理,与工程路径的相对关系。 比如工程路径:D:/workspace/MyPro/ 文件路径:D:/workspace/MyPro/myDoc/aaa.txt 入库的时候可以字符串替换,将“D:/workspace/MyPro/”替换为空,文件路径入库为“myDoc/aaa.txt”,这样就OK了,就算换了环境也没关系。[/quote] OK又学到了一招。谢谢啦。[/quote]
hz594556878 2013-06-27
  • 打赏
  • 举报
回复
引用 14 楼 oh_Maxy 的回复:
[quote=引用 13 楼 hz594556878 的回复:] [quote=引用 12 楼 oh_Maxy 的回复:] File file = new File(System.getProperty("user.dir") + path);
额。还是不行,不过获得文件的绝对路径可以,反正这文章后面也是需要上传到服务器的。所以到时候直接把文章保存的绝对路径给保存在数据库里面就行了。还是谢谢啦。[/quote] 建议存到数据库不要使用绝对路径,可以对路径进行处理,与工程路径的相对关系。 比如工程路径:D:/workspace/MyPro/ 文件路径:D:/workspace/MyPro/myDoc/aaa.txt 入库的时候可以字符串替换,将“D:/workspace/MyPro/”替换为空,文件路径入库为“myDoc/aaa.txt”,这样就OK了,就算换了环境也没关系。[/quote] OK又学到了一招。谢谢啦。
oh_Maxy 2013-06-27
  • 打赏
  • 举报
回复
引用 13 楼 hz594556878 的回复:
[quote=引用 12 楼 oh_Maxy 的回复:] File file = new File(System.getProperty("user.dir") + path);
额。还是不行,不过获得文件的绝对路径可以,反正这文章后面也是需要上传到服务器的。所以到时候直接把文章保存的绝对路径给保存在数据库里面就行了。还是谢谢啦。[/quote] 建议存到数据库不要使用绝对路径,可以对路径进行处理,与工程路径的相对关系。 比如工程路径:D:/workspace/MyPro/ 文件路径:D:/workspace/MyPro/myDoc/aaa.txt 入库的时候可以字符串替换,将“D:/workspace/MyPro/”替换为空,文件路径入库为“myDoc/aaa.txt”,这样就OK了,就算换了环境也没关系。
hz594556878 2013-06-27
  • 打赏
  • 举报
回复
引用 12 楼 oh_Maxy 的回复:
File file = new File(System.getProperty("user.dir") + path);
额。还是不行,不过获得文件的绝对路径可以,反正这文章后面也是需要上传到服务器的。所以到时候直接把文章保存的绝对路径给保存在数据库里面就行了。还是谢谢啦。
oh_Maxy 2013-06-27
  • 打赏
  • 举报
回复
File file = new File(System.getProperty("user.dir") + path);
oh_Maxy 2013-06-27
  • 打赏
  • 举报
回复
引用 10 楼 hz594556878 的回复:
[quote=引用 9 楼 oh_Maxy 的回复:] 如果把文件放到src目录下,必须要通过绝对路径找了,而且工程打包后,src是不存在的。我们的类编译后的包路径是在class文件下的。 建议放到工程目录下,先获得工程目录,然后就好办了。
文件是放在WebContent下的。您说的工程目录下是指的和WebContent同级的目录吗?[/quote] 是的,比如:

        File f = new File("testFilePath.txt");
        if(!f.exists())
        {
            f.createNewFile();
        }
是可以直接在工程目录下创建一个文件的。 当然,最安全的获取工程目录的方法,是使用System.getProperty("user.dir")获取。这样,可以以工程目录为基准,可以操作当前目录(./实现)或上级目录(../实现),查找目标文件和文件夹。
hz594556878 2013-06-27
  • 打赏
  • 举报
回复
引用 9 楼 oh_Maxy 的回复:
如果把文件放到src目录下,必须要通过绝对路径找了,而且工程打包后,src是不存在的。我们的类编译后的包路径是在class文件下的。 建议放到工程目录下,先获得工程目录,然后就好办了。
文件是放在WebContent下的。您说的工程目录下是指的和WebContent同级的目录吗?
oh_Maxy 2013-06-27
  • 打赏
  • 举报
回复
如果把文件放到src目录下,必须要通过绝对路径找了,而且工程打包后,src是不存在的。我们的类编译后的包路径是在class文件下的。 建议放到工程目录下,先获得工程目录,然后就好办了。
hz594556878 2013-06-27
  • 打赏
  • 举报
回复
引用 6 楼 oh_Maxy 的回复:
[quote=引用 4 楼 hz594556878 的回复:] [quote=引用 3 楼 oh_Maxy 的回复:] [quote=引用 2 楼 hz594556878 的回复:] [quote=引用 1 楼 oh_Maxy 的回复:] 嗯,有没有报错呢?是路径找不到还是怎么了? 建议将查询出来的字符串路径打印出来调试下,或者debug一步步跟代码,看看有啥问题。
没有报错哦,路径打印出来了的,debug了一下好像这个方法没有执行到。[/quote] 没执行,是不是在执行前做了判断呢?看看判断条件是否有问题,或者少了!之类的[/quote] content = getArticleContent(res.getString("article_content")); 这句代码就是调用那个方法的。可以看出来,没有判断啊。[/quote] 5L说的有道理,把异常堆栈打印一下,LZ把所有的 catch (Exception e) { } 改成 catch (Exception e) { e.printStackTrace(); }[/quote] 谢谢啦,确实是异常了,找不到文件路径,这个类的包为:com.ccniit.dao,文件存放在WebContent下的TextFolder下,数据库中的值为TextFolder/ss.txt,怎么写才能正确读写到这个文件,我在path前面加了好几个../都不行。
hz594556878 2013-06-27
  • 打赏
  • 举报
回复
引用 5 楼 zcwgogo 的回复:
你确定这个 getArticleContent 方法没执行么?这个应该是没有理由的,我估计 是报错了,然后你捕捉到 没有 打印错误信息 } catch (Exception e) { } finally。。 还有一个 你的读取文件的逻辑为什么要放在对 ResultSet 的遍历里面,我建议你先拿出来 转成bean ,把数据库连接都关掉,然后在去读文件内容。
恩,好的建议,接受啦。确实是异常了,找不到文件路径,这个类的包为:com.ccniit.dao,文件存放在WebContent下的TextFolder下,数据库中的值为TextFolder/ss.txt,怎么写才能正确读写到这个文件,我在path前面加了好几个../都不行。
oh_Maxy 2013-06-27
  • 打赏
  • 举报
回复
引用 4 楼 hz594556878 的回复:
[quote=引用 3 楼 oh_Maxy 的回复:] [quote=引用 2 楼 hz594556878 的回复:] [quote=引用 1 楼 oh_Maxy 的回复:] 嗯,有没有报错呢?是路径找不到还是怎么了? 建议将查询出来的字符串路径打印出来调试下,或者debug一步步跟代码,看看有啥问题。
没有报错哦,路径打印出来了的,debug了一下好像这个方法没有执行到。[/quote] 没执行,是不是在执行前做了判断呢?看看判断条件是否有问题,或者少了!之类的[/quote] content = getArticleContent(res.getString("article_content")); 这句代码就是调用那个方法的。可以看出来,没有判断啊。[/quote] 5L说的有道理,把异常堆栈打印一下,LZ把所有的 catch (Exception e) { } 改成 catch (Exception e) { e.printStackTrace(); }
zcwgogo 2013-06-27
  • 打赏
  • 举报
回复
你确定这个 getArticleContent 方法没执行么?这个应该是没有理由的,我估计 是报错了,然后你捕捉到 没有 打印错误信息 } catch (Exception e) { } finally。。 还有一个 你的读取文件的逻辑为什么要放在对 ResultSet 的遍历里面,我建议你先拿出来 转成bean ,把数据库连接都关掉,然后在去读文件内容。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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