浏览 4271 次
锁定老帖子 主题:读取文件的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-21
//把数据写入xls文件中 public int ReadFile_xls(String fileName, String newFileName, String sign) throws IOException, WriteException, ArrayIndexOutOfBoundsException{ // 初始化工作 FileReader fr = new FileReader(fileName); WritableWorkbook wwb = null; FileOutputStream out = null; File outfile = new File(newFileName); try { out = new FileOutputStream(outfile, false); } catch (FileNotFoundException e1) { e1.printStackTrace(); } try { //创建新的excel文件 wwb = Workbook.createWorkbook(out); // 创建工作表 WritableSheet ws = wwb.createSheet("Sheet1", 0); // 逐行添加数据 br = new BufferedReader(fr); // System.out.println(br.readLine()); int i = 1; // 一次读入一行,直到读入null为文件结束 // while(br.ready()){ while (br.read() != -1) { // while(br.readLine() != null){ // for(String line = br.readLine(); line != null; line = br.readLine()) { System.out.println(br.readLine()); readoneline = br.readLine(); strt = ReadFileNum(readoneline, sign); for (int j = 1; j <= strt.length; j++) { //System.out.println(strt[j-1]); Label label = new Label(j-1, i, strt[j-1]); ws.addCell(label); } i++; } br.close(); fr.close(); } catch (Exception e) { // logger.error("export excel error:" + e); e.printStackTrace(); } finally { if(br != null){ br.close(); } if(fr != null){ fr.close(); } // br.close(); if (wwb != null) { wwb.write(); wwb.close(); fileOK = 1; } } return fileOK; } 我用了四种BufferedReader下的方法去循环读取内容,可是都出错,要不就是少了几行的内容,要不就是每行的第一个字母丢失,就没有完全正确的,哪位大虾可以给我一点帮助啊,谢谢了啊! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-04-21
最后修改:2011-04-21
读取流的操作会导致流中的游标向后移动
例如你while的条件中的while(br.read()!=-1) 标准输出中的system.out.println(br.readLine())都导致了游标向后移动 你真正使用时的readLine实际上已经不是你标准输出中的readLine了 不知这样解释你是否明白, 正确的用法是这样的 String line = null; while((line=br.readLine)!=null) { sysout(line) ... // do ur code } |
|
返回顶楼 | |
发表时间:2011-04-21
Dark-Mraz 写道 读取流的操作会导致流中的游标向后移动
例如你while的条件中的while(br.read()!=-1) 标准输出中的system.out.println(br.readLine())都导致了游标向后移动 你真正使用时的readLine实际上已经不是你标准输出中的readLine了 不知这样解释你是否明白, 正确的用法是这样的 String line = null; while((line=br.readLine)!=null) { sysout(line) ... // do ur code } 你回答的我明白,我下边也有用到你写的方法,但是用你写的方法会丢失行的内容,也就是说,如果一个txt文件有十四行内容,用你写的这种方法虽然不会丢失每行的首字母,但是可以读取出来写入到excel文件中的只有七行或者不到14行的代码。 |
|
返回顶楼 | |
发表时间:2011-04-21
dragonlin 写道 我写了一个读取txt文件的程序,并插入excel文件中,代码如下:
//把数据写入xls文件中 public int ReadFile_xls(String fileName, String newFileName, String sign) throws IOException, WriteException, ArrayIndexOutOfBoundsException{ // 初始化工作 FileReader fr = new FileReader(fileName); WritableWorkbook wwb = null; FileOutputStream out = null; File outfile = new File(newFileName); try { out = new FileOutputStream(outfile, false); } catch (FileNotFoundException e1) { e1.printStackTrace(); } try { //创建新的excel文件 wwb = Workbook.createWorkbook(out); // 创建工作表 WritableSheet ws = wwb.createSheet("Sheet1", 0); // 逐行添加数据 br = new BufferedReader(fr); // System.out.println(br.readLine()); int i = 1; // 一次读入一行,直到读入null为文件结束 // while(br.ready()){ while (br.read() != -1) { // while(br.readLine() != null){ // for(String line = br.readLine(); line != null; line = br.readLine()) { System.out.println(br.readLine()); readoneline = br.readLine(); strt = ReadFileNum(readoneline, sign); for (int j = 1; j <= strt.length; j++) { //System.out.println(strt[j-1]); Label label = new Label(j-1, i, strt[j-1]); ws.addCell(label); } i++; } br.close(); fr.close(); } catch (Exception e) { // logger.error("export excel error:" + e); e.printStackTrace(); } finally { if(br != null){ br.close(); } if(fr != null){ fr.close(); } // br.close(); if (wwb != null) { wwb.write(); wwb.close(); fileOK = 1; } } return fileOK; } 我用了四种BufferedReader下的方法去循环读取内容,可是都出错,要不就是少了几行的内容,要不就是每行的第一个字母丢失,就没有完全正确的,哪位大虾可以给我一点帮助啊,谢谢了啊! 你在br.read()那把第一个字母读过了 当然就丢失首字母了 read和readline都不能单纯的用作while判断 需要先写入某个变量 然后根据变量判断才行 |
|
返回顶楼 | |
发表时间:2011-04-22
dragonlin 写道 Dark-Mraz 写道 读取流的操作会导致流中的游标向后移动
例如你while的条件中的while(br.read()!=-1) 标准输出中的system.out.println(br.readLine())都导致了游标向后移动 你真正使用时的readLine实际上已经不是你标准输出中的readLine了 不知这样解释你是否明白, 正确的用法是这样的 String line = null; while((line=br.readLine)!=null) { sysout(line) ... // do ur code } 你回答的我明白,我下边也有用到你写的方法,但是用你写的方法会丢失行的内容,也就是说,如果一个txt文件有十四行内容,用你写的这种方法虽然不会丢失每行的首字母,但是可以读取出来写入到excel文件中的只有七行或者不到14行的代码。 这是因为你后面还有一行readoneline = br.readLine(); 只要你调用了 br.readLine() 就会导致你读取的游标下移一行,这个时候实际上你的readoneline 已经是line的下一行了. 所以请把你的readoneline = br.readLine(); strt = ReadFileNum(readoneline, sign); 也改成strt = ReadFileNum(line, sign); |
|
返回顶楼 | |
发表时间:2011-04-22
while (br.read() != -1) { // while(br.readLine() != null){ // for(String line = br.readLine(); line != null; line = br.readLine()) { System.out.println(br.readLine()); readoneline = br.readLine(); 楼上说得很对啊,BufferedReader readLine()每call一次就下移一行 应该在while((line=br.readLine())!=null) 将System.out.println(br.readLine()); 变成System.out.println(line); |
|
返回顶楼 | |
发表时间:2011-04-24
文本文件进行readline读出后的文本是不带\r\n换行的。
故 String line=""; while((line=r.readline())!=null) { readline+="\r\n"; } 行数就对了 如果是linux添加\n即可 |
|
返回顶楼 | |