`
dragonlin
  • 浏览: 1422 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

读取文件的问题

阅读更多
我写了一个读取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下的方法去循环读取内容,可是都出错,要不就是少了几行的内容,要不就是每行的第一个字母丢失,就没有完全正确的,哪位大虾可以给我一点帮助啊,谢谢了啊!
分享到:
评论
6 楼 liuzhaolst 2011-04-24  
文本文件进行readline读出后的文本是不带\r\n换行的。

String line="";
while((line=r.readline())!=null)
{
readline+="\r\n";
}
行数就对了
如果是linux添加\n即可
5 楼 Simon.C 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);
4 楼 albertshaw 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);
3 楼 adri1 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判断  需要先写入某个变量  然后根据变量判断才行
2 楼 dragonlin 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行的代码。
1 楼 Dark-Mraz 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
}

相关推荐

    读写文件读取文件操作读取文件操作读取文件操作读取文件操作

    在IT领域,文件读写是基础且至关重要的操作,它涉及到程序与数据的交互,无论是存储用户输入,保存程序状态,还是处理数据,都离不开文件的读取和写入。以下将详细介绍关于“读取文件操作”的核心知识点,并结合可能...

    codesys读写CVS文件(亲测)

    另外需要读取txt文件的关注本人往期的文章,有讲解。资源内部包含工程文件以及CVS文件。 如果是打开工程的界面不显示,可能是codesys的版本过低,需要更新版本。可以参见博客文章:codesys工程ST语言学习笔记(六)...

    java 按顺序读取文件

    在Java编程语言中,按顺序读取文件是基础且重要的操作。这通常涉及到使用I/O流(Input/Output Stream)来处理文件数据。本篇文章将深入探讨如何在Java中实现按顺序读取文件,以及涉及的相关知识点。 首先,Java提供...

    易语言大文件读写模块

    通常,初始化可能涉及打开文件、检查文件是否存在、设置读写模式(读取或写入)等步骤。 “取总行数”功能允许开发者获取文件中的总行数,这对于数据统计或分析非常有用。实现这一功能通常需要遍历文件,但为了避免...

    pb下读写xml文件的例子.rar_pb_pb 读取xml_pb 读取xml文件_pb9 xml_pb下读写xml文件的例子

    本示例主要探讨如何在PowerBuilder 9(PB9)中进行XML文件的读取和写入操作。 首先,我们需要了解PowerBuilder中的XML支持。PB9引入了对XML的支持,包括XMLDocument对象和DOM解析器,使得开发者能够方便地与XML数据...

    delphi读取文件流

    在这个改进版本中,我们使用了一个循环来分块读写文件,这样可以有效降低内存占用,适合处理大型文件。 总结,Delphi中的`TFileStream`提供了方便的文件流操作,通过它我们可以高效地读取、写入文件。结合字节数组...

    Android读写配置文件

    在Android开发中,读写配置文件是常见的任务,主要用于存储应用程序的设置、用户偏好或者其他持久化数据。配置文件通常以XML或JSON格式存在,因为它们结构清晰,易于解析。本实例将详细介绍如何在Android中进行读取...

    systemverilog读写文件测试代码

    文件读写示例代码分析 #### 文件读取过程 在给定的代码片段中,首先使用`$fopen`函数打开一个二进制文件,并将文件句柄赋值给变量`file`。接着通过`$fread`函数将文件中的数据读取到数组`file_date`中。读取完成后...

    Android 读写文件实例

    在Android平台上,对文件进行读写操作是应用程序中常见的需求,比如存储用户数据、缓存信息或者媒体资源。本文将详细讲解如何在...在实际项目中,还需要结合具体需求,考虑数据安全、文件同步、性能优化等方面的问题。

    vc读取bin文件

    在VC++开发环境中,"vc读取bin文件"是一个常见的任务,特别是在处理二进制数据或者需要从外部加载配置或资源时。...在处理bin文件时,一定要注意文件编码、数据类型和大小端问题,确保数据正确无误地被读取和解释。

    Qt之读写ini文件

    在Qt框架中,读写`.ini`配置文件...通过正确处理编码问题,我们可以安全地在`.ini`文件中存储和读取中文字符串,实现跨平台的配置管理。在实际项目中,可以根据需求灵活运用这些功能,以实现高效且用户友好的配置管理。

    python中的文件读写练习题(csdn)————程序.pdf

    在实际应用中,文件读写操作是非常常见的,例如读取数据文件、写入日志文件、导出报表等。 Python 语言提供了多种文件读写方式,包括文本文件、CSV 文件、Excel 文件等。 读取 CSV 文件 CSV (Comma Separated ...

    codesys读取文件txt 百分百好使

    本篇文章将详细探讨如何在CODESYS中读取TXT文件,这对于数据记录、日志存储或与上位机交互等应用十分常见。 首先,我们需要了解CODESYS中的文件系统访问。在CODESYS中,文件操作通常通过“File Service”库来实现,...

    linux c 配置文件读写

    在Linux系统中,C语言开发过程中,经常需要与配置文件打交道,进行读取和写入操作。配置文件通常用于存储程序的设置或用户偏好,使其能够根据不同的环境或需求进行定制。下面我们将深入探讨如何在C语言中实现对配置...

    读取PLC寄存器,读写XML文件

    本篇将详细阐述如何读取PLC寄存器以及操作XML文件。 首先,PLC是工业控制系统的核心组成部分,它负责接收来自传感器的输入信号,并根据预设的程序逻辑控制执行器的动作。读取PLC寄存器是获取设备状态或监控生产过程...

    C#读取BIN文件内容

    在处理特定类型的二进制文件,如BIN文件时,C#提供了丰富的库和方法来读取和操作这些文件。BIN文件通常包含原始二进制数据,可能来自固件更新、程序执行代码或者数据存储。下面我们将详细讨论如何在C#中读取BIN文件...

    用C语言读写SGY格式的地震数据文件-苏.rar_C语言;读写SGY格式文件_sgy_sgy文件读取_sgy读写_读写sgy文件

    在C语言中读取SGY文件,首先需要打开文件,可以使用`fopen()`函数,指定文件路径和打开模式(如"rb"表示以二进制读取)。接着,读取头信息,这通常涉及读取固定大小的块,并解析其中的各个字段。例如,使用`fread()`...

    c++文件读写.pdf

    读写文件分为文本文件和二进制文件的读取。 1、文本文件的读写 文本文件的读写很简单:用插入器 () 向文件输出;用析取器 (&gt;&gt;) 从文件输入。 例如: file2 ; // 向文件写入字符串"I Love You" int I; file1 &gt;...

    C++读写ini配置文件

    在C++编程中,处理配置文件通常是为了存储和读取应用程序的设置或用户偏好。ini文件是一种常见的配置文件格式,其结构简单,易于理解和操作。本文将深入探讨如何使用C++来读写ini配置文件,主要参考提供的"rwconfig....

Global site tag (gtag.js) - Google Analytics