`
h140465
  • 浏览: 21779 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java解析csv文件

阅读更多
   最近项目中,需要处理大量的CSV文件,需要将这些文件转换成txt格式,并以|进行分隔。最郁闷的是:这些文件数据格式好多都是不规范的。
由于项目使用的是JDK1.4,String的新特性没法用,写了个StringUtil类
今天又遇到新的问题,无语,重新修改了下程序
  此代码可以解决字段中出现分隔符,双引号等等。。。


/**
	 * 对于文件中字段包含逗号的文件的特殊处理 (同时可以去除掉双引号)处理完以后会在相同的路径下输出相同文件名的TXT文件
	 * 
	 * @throws Exception
	 */
	public static void specialChar(String filePath,int starRow) throws Exception {

		BufferedReader br = null;
		File f = new File(filePath);
		String fileName = f.getName();

		if (!fileName.substring(fileName.indexOf(".") + 1).equals("csv")) {
			throw new Exception(filePath + "不是一个CSV文件");
		}
		File file = new File(StringUtil.replace(f.getPath(), "csv", "txt"));
		FileWriter filewriter = null;
		try {
			br = new BufferedReader(new InputStreamReader(
					new FileInputStream(f), "utf-8"));
			filewriter = new FileWriter(file, false);
			SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

			System.out.println(sd.format(new Date()));
			String tempString = null;
			int i = 0;
			while ((tempString = br.readLine()) != null) {
				if (i < starRow-1) {
					i++;
					continue;
				}
				if(tempString.trim().equals(""))
					break;
				if (StringUtil.contains(tempString, "\"")) {
					tempString = deepParser(tempString,filePath);
				} else
					tempString = StringUtil.replace(tempString, ",", "|");
//				System.out.println(tempString);
				filewriter.write(stringTrim(tempString, "\\|") + "\r\n");
				i++;
			}
			System.out.println(sd.format(new Date()));
		} catch (Throwable e) {
			log.warn("解析文件:【" + filePath + "】出错", e);
			e.printStackTrace();
		} finally {
			try {
				br.close();
				filewriter.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

	public static String deepParser(String str,String filePath) {
		System.out.println(str);
		String temp = str;
                          str = str+",";
		StringBuffer sb = new StringBuffer();
		try {
			int from = 0;
			int end = str.length();
			int i = 0;
			while (StringUtil.contains((str = str.substring(from)), "\"")) {
				from = str.indexOf("\"");
				end = str.indexOf("\"", from + 1);
				sb.append(StringUtil.replace(str.substring(0, from), ",", "|"));
				sb.append(str.substring(from + 1, end));
				from = end + 1;
				i++;
			}
			sb.append(StringUtil.replace(str, ",", "|"));
		} catch (Throwable e) {
			log.warn("解析文件:【" + filePath + "】出错,一下数据有问题:"+temp, e);
			e.printStackTrace();
		}
                       String s = sb.toString();
		     s = s.substring(0, s.lastIndexOf("|"));
		     return s;
	}


	//去除字段2边空格,可以指定分隔符
	public static String stringTrim(String str, String regex) {
		str = str+" ";
		String[] strs = str.split(regex);
		StringBuffer sb = new StringBuffer();

		for (int i = 0; i < strs.length; i++) {
			sb.append(strs[i].trim() + "|");
		}

		return sb.toString().substring(0, sb.toString().lastIndexOf("|"));
	}
分享到:
评论

相关推荐

    Java解析CSV文件

    本篇将详细介绍如何在Java中解析CSV文件,并以给定的"Java解析CSV文件"主题为例,结合提供的资源——`lucky_number_format.csv`、`javacsv-2.0.jar`和`CsvUtil.java`进行深入探讨。 首先,我们来看`javacsv-2.0.jar...

    java 解析csv文件例子,csv文件 中文乱码问题

    本篇文章将详细探讨如何在Java中解析CSV文件,并解决中文乱码的问题。 首先,我们需要了解如何使用Java的标准库`java.io`和`java.nio`来读取CSV文件。最常用的是使用`BufferedReader`配合`Scanner`或者`Files.lines...

    java操作csv文件(读、写)

    虽然csv文件能用Excel打开,但是csv文件没有像Excel一样有规定的电子表格形式,故使用POI无法解析csv文件,在网上找了一下,发现java有提供java csv文件来帮忙解析csv文件。  CSV是Comma Separated Values(逗号...

    文件上传,java解析excel和csv 转javabean

    本篇文章将深入讲解如何使用Java解析Excel(包括Excel 2003和2007格式)和CSV文件,并将解析的数据映射到Java Bean,以便后续的数据处理和存储。 首先,我们需要了解如何在Java中处理文件上传。在Servlet环境中,...

    csv文件解析工具(javacsv.jar包)

    这个包非常好,能处理特殊字符和换行符的问题,自己写的话很容易在特殊字符和换行符上出问题,建议用高人写的jar包。

    java读取csv文件示例分享(java解析csv文件)

    以下是一个简单的Java程序示例,演示如何读取并解析CSV文件。 首先,我们需要了解CSV文件的基本结构。CSV文件是由行和列组成的数据文件,每一行代表一个记录,列之间用逗号分隔。在这个例子中,我们有一个包含三列...

    javacsv_CsvReader:解析CSV文件

    `javacsv`库是处理CSV文件的一种工具,特别是`CsvReader`类,它提供了方便的方法来读取和解析这些文件。 `CsvReader`是`javacsv`库中的核心类,用于读取CSV文件并将其内容转换为Java对象。这个库由`csv`和`java`...

    java 读取csv 并转为Map<String,Object>

    通过引用【opevcsv】依赖,逐行读取数据 并转为Map,Object&gt;格式,后续可以通过BeanUtil.MaptoBean()方法...csv文件必须带表头,bean对象命名符合驼峰格式; 通过此方法可以快速的将文件转换为程序可以操作的bean对象;

    [csvjdbc] Java解析csv文件的开源包及改动

    NULL 博文链接:https://woniu1983.iteye.com/blog/693251

    完整实现ftp上传与下载并解析csv文件

    Java中,可以使用OpenCSV或者Apache Commons CSV库来解析CSV文件。解析过程通常包括打开文件、创建解析器、迭代读取每一行,然后将每一行的数据转换为所需的数据结构,如列表或对象实例。 3. 多文件下载与并发处理...

    读取创建CSV文件并自动解析文件编码方式

    本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言进行示例,同时引入第三方库来辅助处理编码问题。 首先,创建CSV文件的基本过程涉及将数据写入具有特定分隔...

    csv解析 javacsv2.1解析csv文件的方法

    在Java中,处理CSV文件通常需要借助第三方库,如本案例中的`javacsv`库,版本2.1。这个库提供了一系列方法来帮助我们方便地解析和生成CSV数据。 `javacsv`库由Jonathan Leffler开发,它允许开发者通过简单的API读取...

    java使用javacsv读取csv文件 导入Mysql数据库

    这个过程涉及几个关键步骤,包括读取CSV文件、解析数据、建立与数据库的连接以及执行SQL插入语句。本篇文章将详细讲解如何使用javacsv库来实现这一功能。 首先,`javacsv`是一个轻量级的Java库,专门用于处理CSV...

    java 导出csv文件并上传sftp

    使用univocity-parsers,我们可以方便地将Java对象转换为CSV格式,或者从CSV文件中解析数据。以下是使用该库创建CSV文件的基本步骤: 1. 添加依赖:在你的项目中,你需要引入univocity-parsers的Maven或Gradle依赖...

    java对csv文件进行读写操作

    CSV(Comma Separated Values)文件是一种常见的数据存储格式,常用于数据...通过这些知识,你应该能轻松地完成读取、写入和解析CSV文件的任务。但记住,根据实际情况,可能需要进一步定制处理逻辑,以满足特定的需求。

    Java操作csv文件

    如果CSV文件包含特殊字符、逗号分隔的字段或者引用的字段(如`"Field, with comma"`),Apache Commons CSV库可以正确解析它们。例如,`CSVFormat`类允许你定义分隔符、引用字符、行结束符等。 6. **错误处理**: ...

    java 读写 csv 文件

    使用`CSVFormat`和`CSVParser`类来解析CSV文件。首先创建一个`CSVFormat`实例,设置分隔符、引用字符等参数,然后通过`Files.newBufferedReader()`读取文件内容,最后使用`CSVParser.parse()`方法解析文件。 ```...

    java实现导出csv文件并上传sftp

    本篇文章将深入探讨如何使用Java实现CSV文件的生成,并将其通过SFTP(Secure File Transfer Protocol)协议上传到指定服务器。 首先,我们要介绍的是用于生成CSV文件的库:univocity-parsers。这是一个高效、灵活且...

    JAVA 对CSV和Excel文件格式的读写

    利用Java swing 对csv和excel文件进行读写;并且可以同时读取5个文件的数量;通过关键字配置来读文件,还有就是通过POI CSVWriter等类的使用来对excel和csv等文件进行操作

Global site tag (gtag.js) - Google Analytics