把Excel中的数据导出成txt文件的注意问题

一、问题描述:

今天,我把Excel中的数据导成txt文件后,用Java读取这个txt文件中的内容时,发现读到到数据多了空白行(即列数增加了一倍),并且每一行的数据之间是以制表符(即和按下tab键的效果一样或像Java中的“\t”)的间隔分割。


二、实验重现:

Excel中的数据如下:

1 a A
2 b B
3 a A
4 b B
5 a A
6 b B
7 a A
8 b B
9 a A
10 b B

把它导出后的txt文件如下:

1 a A
2 b B
3 a A
4 b B
5 a A
6 b B
7 a A
8 b B
9 a A
10 b B

用Java来读取这个txt文件中的内容,且把读取到的每一行一""分割统计每行的字符个数代码如下所示:

package DemoExcel;

import java.io.*;

public class DemoReadAndWrite {
	public static void main(String[] args) throws IOException {

		test();
	}

	public static void test() throws IOException {

		BufferedReader bfr = new BufferedReader(
				new FileReader(
						"C://Users//Administrator//Desktop//ExcelTest//afterTranslate.txt"));

		String flag = null;
		//用于统计行数
		int count = 0;
		while ((flag = bfr.readLine()) != null) {
			//把读取到的一行字符串打印出来
			System.out.println(flag);
			//以""切割每一行的字符串,打印出分割后字符串的个数
			System.out.println(flag.split("").length);
			count++;
		}
		//把txt中的行数打印出来
		System.out.println("count=" + count);
	}

}

输出的结果为:

把Excel中的数据导出成txt文件的注意问题_第1张图片


三、问题分析:

制表符相当于键盘上按下TAB键之间的距离,也称为空白符。空白符只在字符常量和字符串常量中起作用。在其它地方出现时,只起间隔作用,编译程序对它们忽略。因此在程序中使用空白符与否,对程序的编译不发生影响,但在程序中适当的地方使用空白符将增加程序的清晰性和可读性。就是说只是在字符常量和字符串常量中是代表一定的距离(比如8个空格),而在其它地方只是代表一个间隔,不代表固定大小的空白距离。

在把Excel中的数据导成txt格式时,它是以制表符(即按下一个tab键的效果或像Java中的“\t”)分割,并且是以Unicode编码存储的;如下图所示:

把Excel中的数据导出成txt文件的注意问题_第2张图片把Excel中的数据导出成txt文件的注意问题_第3张图片

四、问题的解决方法:

方法一:

出现这种情况,可以从字符编码入手解决,把txt的Unicode字符编码改成Utf-8字符编码,问题得到了解决(注意:此时,txt文件中的每一行是以制表符(即和按下tab键的效果一样或像Java中的“\t”)间隔

把Excel中的数据导出成txt文件的注意问题_第4张图片

把Excel中的数据导出成txt文件的注意问题_第5张图片


方法二:

直接在Excel中就把数据全部以“ ”(空格)间隔后,存储到一列单元格中(方法可以看我之前的博客文章,博客地址为:http://blog.csdn.net/g_66_hero/article/details/70568368),在导出成txt格式,这样就是以" "(及一个空格)为间隔的数据了,同样的,需要把Unicode 编码转换成UTF-8编码之后,才能用Java来正确的读取txt文件内容。

方法三:

在Excel中,直接选中需要的数据,然后直接复制,创建一个txt文件,把刚刚复制的内容直接粘贴到txt文件中,这样,这个txt文件就不用再去转成UTF-8编码了,直接用Java去读取就可以了(和上面方法一和方法二转换完编码后的效果一样),但是要注意,此时txt文件中的每一行是以制表符(即和按下tab键的效果一样或像Java中的“\t”)间隔


你可能感兴趣的:(Excel)