0 0

怎么用JAVA的api去读取一个文本文件,换行符必须采用CRLF("\r\n")3

我现在要用java读取一个CSV文件,其中明确给出了CSV文件要以CRLF(即"\r\n")为换行符号,也就是说如果单出现CR或者LF不作为换行符号处理。
利用BufferedReader这个类的readLine方法默认把'\r','\n'或'\r\n'都当作换行符号。

与我要实现的读取数据不符。请问有没有比较好的方法? 难道非要重写一个Reader不成?

希望有兴趣或者知情者出来给个点子至少讨论一下。
2010年1月20日 12:13

4个答案 按时间排序 按投票排序

0 0

首先在http://ostermiller.org/utils/download.html 上下载com.Ostermiller.util cvs的jar包.

有了这个jar包就可以写个工具类,专门控制csv文件的读取操作.

public class CsvFileParser{ 

    private LabeledCSVParser csvParser;//csvParser 

    private int currLineNum = -1;//The current line number for reading. 

    private String[] currLine = null;//The data of current line.
   

    /*
     *  Param: in InputStream 
     *  throws IOException
     */  

    public CsvFileParser(InputStream in) throws IOException {
        
            csvParser = new LabeledCSVParser(new ExcelCSVParser(in));
            currLineNum = csvParser.getLastLineNumber();
    }
    
    /*
     * 	Get the titles of csv file.
     * 
     *	return String[]
     */
    public String[] getTitles() throws IOException {
    	return csvParser.getLabels();
    }
              

    /*
     * Checkout whether it has more data.
     *
     * @return ture: has data,false nodata.
     */
    public boolean hasMore() throws IOException {
        currLine = csvParser.getLine();
        currLineNum = csvParser.getLastLineNumber();
        if (null == currLine)
            return false;
        return true;
    } 

    /*
     * Get the data of filed by field name.
     * param:String filedName
     * 
     * @return:String 
     */
    public String getByFieldName(String fieldName) {
               
        return csvParser.getValueByLabel(fieldName);
    } 

    /*
     * Close the parser.
     *
     * 
     */
    public void close() throws IOException {
        csvParser.close(); 

    } 

    /*
     * Read the current line.Return the data of current line.
     *
     * @return String[] 
     */
    public String[] readLine() throws IOException {
        currLine = csvParser.getLine(); 

        currLineNum = csvParser.getLastLineNumber(); 

        return currLine;
    } 
    
    /*
     * Get current line number.
     * 
     * @return int
     */
	public int getCurrLineNum(){ 
		return currLineNum; 
	
	}  
	
	/*
	 * Get the data of the current line.
	 * 
	 * @return String[]
	 */
	public String[] getCurrLine() {
		return currLine;
	}

} 

2010年1月20日 14:16
0 0

csv文件有专门的处理程序的 不需要自己写了
而且我用BufferedReader读过 也没出现问题

2010年1月20日 13:25
0 0

你可以参考一下这个
http://ostermiller.org/utils/CSV.html

2010年1月20日 12:13
0 0

不清楚为什么必须规定“"\r\n"”为换行标记,如果必须按照此约定编码的话,个人建议使用分段读取CSV文件(分段大小可自定义,几百K即可),然后循环判断“"\r\n"”。如果有知道JavaAPI中可以直接设置请斧正,谢谢。

2010年1月20日 12:13

相关推荐

    换行符批量转换工具

    换行符批量转换工具:LF to CRLF / CRLF to LF ,自动寻找子目录,自定义替换类型:.txt.c.h(格式:.类型 .*为全部)。

    CR LF CRLF转换

    在IT领域,文本文件的换行符是操作系统之间的一个重要差异。不同的系统使用不同的字符序列来表示一行的结束。在Windows系统中,行尾通常由一个回车字符(CR,Carriage Return)和一个换行字符(LF,Line Feed)组成...

    改变文本文件的回车换行符命令行工具

    改变文本文件的回车换行符,命令行下使用。Windows XP以上版本操作系统。

    文本编辑器(java)

    此外,文本编辑器可能还涉及到文本格式的处理,比如换行符的处理,因为不同操作系统有不同的换行符标准(Windows使用CRLF,Linux和macOS使用LF)。为了确保兼容性,开发者需要对读取和写入的文本进行适当的转换。 ...

    javascript去掉拷贝数据中带换行数据到文本框

    首先,我们要理解在JavaScript中,换行符主要有两种形式:LF(Linux和Unix系统中,'\n')和CRLF(Windows系统中,'\r\n')。有时,拷贝的数据可能同时包含这两种换行符。因此,我们需要编写一个函数来处理这些换行符...

    GIT 换行符自动转换导致整个文件被修改的解决方案

    Unix/Linux使用的是LF,Mac后期也采用了LF,但Windows一直使用CRLF【回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)】作为换行符。而git入库的代码采用的是LF格式,它考虑到了跨平台协作的场景,提供了“换行符自动...

    将unix文本文件转换成dos(windows)文本文件的例子 (10KB)...

    Unix和Windows系统在处理文本文件时有不同的行结束符:Unix使用换行符(LF),而DOS/Windows系统则使用回车+换行符(CR+LF)作为一行的结束。因此,当一个Unix格式的文本文件在Windows环境下打开时,可能会显示为每...

    文本文件按行拆分多个成文件

    文件的内容通常以行的形式呈现,每一行由若干个字符加上行结束符(如LF或CRLF)组成。在不同的操作系统中,行结束符可能有所不同:Linux/Unix系统使用LF(换行),而Windows系统使用CRLF(回车换行)。 二、为什么...

    IDEA全量替换一次性解决旧项目并将所有文件换行符改为LF问题

    在Java项目开发中,我们经常会遇到跨平台协作的情况,这时文件的换行符一致性就显得尤为重要。LF(Line Feed)是Unix和Linux系统中的换行符,而CR+LF(Carriage Return + Line Feed)是Windows系统所使用的。在不同...

    CRLF.ZIP_CRLF_lines

    描述中提到"converts unix test to windows with cr+lf lines",这表明这个压缩包可能包含一个程序或脚本,它的功能是将使用LF行结束符的UNIX/Linux文本文件转换为使用CRLF行结束符的Windows兼容格式。"full open ...

    unix和windows文件格式互相转化

    这两种系统对文本文件的行结束符处理方式不同,Windows使用CRLF(回车换行)作为行结束符,而UNIX/Linux则只使用LF(换行)作为行结束符。这在跨平台操作时可能会引发问题,如代码编辑器显示异常或脚本执行错误。...

    对源码自动加上utf8 bom头,并修改换行符为unix换行

    在Windows系统中,文本文件的换行通常使用CRLF(Carriage Return, Line Feed,即回车加换行)组合,而在Unix和Linux系统中,只使用LF(Line Feed,换行)作为换行符。这两种不同类型的换行符在跨平台交互时可能导致...

    UNIX回车换行与Windows下的区别

    例如,当在Windows环境下打开一个纯UNIX格式的文本文件时,由于文件中只有换行符(LF),没有回车符(CR),因此Windows系统默认的记事本程序无法识别正确的换行位置,导致所有文本内容被显示在一行内,造成阅读困难...

    易语言取任意行文本

    "取任意行文本"是易语言编程中常见的一个需求,尤其是在处理大量数据或者读写文件时。这个功能可以帮助开发者从文本文件中获取特定行的内容,对数据分析、日志分析等场景非常实用。 首先,我们要理解"取任意行文本...

    文本文件和二进制文件区别读写.rar

    文本文件读写的一个关键特点是行结束符,如CRLF(回车换行)在Windows系统中,LF(换行)在Unix/Linux系统中。在跨平台操作时,需要特别注意这些差异。而二进制文件则没有固定的行结束符概念,它直接保存原始数据的...

    批量转UTF-8/UTF-8-sig/GB18030等批量转CRLF/LF/CR换行符

    而且,转过一次的文本,再转一次,也会乱码。 我在对比了诸多字符集探测库之后,选定了Notepad3使用的魔改版uchardet,这个魔改版uchardet经过Notepad3作者精心调教,精度比原版uchardet更高! 虽然不能说做到百分...

    MATLAB对文本文件(.txt)进行数据存取.docx

    - **文本文件**:文本文件使用ASCII编码,其中每个字符用7位来表示,最高位为0。在文本编辑器中,如记事本,以字符为单位进行编辑。在不同操作系统中,新行可能以不同方式表示(如UNIX的LF,Mac的CR,Windows的CRLF...

    windows 中 \r\n 区别于 类unix中的\n 疑问理解(crlf回车换行)

    在了解Windows系统中的回车换行符(\r\n)与类Unix系统中的换行符(\n)的区别之前,我们首先需要明白什么是回车(Carriage Return, CR)以及什么是换行(Line Feed, LF)。回车的意思是将光标移回到当前行的开头,而...

    Delphi读取目录结构保存为Txt文本文件..rar

    本示例中,我们关注的是如何使用Delphi来读取目录结构并将其保存为TXT文本文件。这个任务在文件管理和系统管理领域非常常见,可以帮助用户方便地记录和备份文件系统的组织方式。 首先,我们需要了解在Delphi中访问...

    linux2dos(转换文本工具)

    Linux系统使用的是LF(Line Feed,换行符)作为行结束标识,而Windows和DOS系统则采用CRLF(Carriage Return + Line Feed,回车加换行符)作为行结束标志。这就导致了在不同系统间交换文本文件时可能会出现格式问题...

Global site tag (gtag.js) - Google Analytics