使用IO流将数据库中数据生成一个文件,结果使用Notepad++打开部分数据结尾出现NUL

场景描述:

  项目中通过java代码中从数据库中查询一系列数据,对数据做相应处理,然后通过字符流将数据写如一个新生成的文件中,将该项目部署在linux服务器上,最后生成的文件拿到本地使用notepad++打开会在部分数据末尾出现NUL

排查原因:

  • NUL在C语言中是一个特殊字符常量‘\0‘,空字符
  • 在linux中处理字符串写入,每行字符串结尾如果是空字符,linux就会用‘\0‘表示

解决方案:

  使用该文件时将NUL替换为“ ”空字符

    public static String trimnull(String string) throws UnsupportedEncodingException
    {//该方法作用是使用" "替换一个字符串中的所有NUL
		ArrayList<Byte> list = new ArrayList<Byte>();
		byte[] bytes = string.getBytes("UTF-8");
		for(int i=0;bytes!=null&&i<bytes.length;i++){
			if(0!=bytes[i]){//排除NUL(0)
				list.add(bytes[i]);
			}else {
				byte b = 32;//空字符对应的byte值
				list.add(b);
			}
		}
		byte[] newbytes = new byte[list.size()];
		for(int i = 0 ; i<list.size();i++){
			newbytes[i]=(Byte) list.get(i);
		}
		String str = new String(newbytes,"UTF-8");
	    return str;
    }

  

原文地址:https://www.cnblogs.com/qf123/p/9700829.html

时间: 2024-12-29 23:49:52

使用IO流将数据库中数据生成一个文件,结果使用Notepad++打开部分数据结尾出现NUL的相关文章

sql数据库中查询第几条到第几条的数据

通用方法: select top 500 * from (select top 1000 * from UserSearchDatas order by ID) a order by ID desc sql数据库中查询第几条到第几条的数据,布布扣,bubuko.com

spark中saveAsTextFile如何最终生成一个文件

一般而言,saveAsTextFile会按照执行task的多少生成多少个文件,比如part-00000一直到part-0000n,n自然就是task的个数,亦即是最后的stage的分区数.那么有没有办法最后只生成一个文件,而不是成百上千个文件了?答案自然是有办法. 在RDD上调用coalesce(1,true).saveAsTextFile(),意味着做完计算之后将数据汇集到一个分区,然后再执行保存的动作,显然,一个分区,Spark自然只起一个task来执行保存的动作,也就只有一个文件产生了.又

matlab结构体形式保存数据生成.mat文件&lt; 转&gt;

2015年 参加天池大数据竞赛 为了建立模型,打算基于matlab使用Random Forest Algorithm的工具包 该工具包我在此分享给大家,http://yunpan.cn/cVXsjQvh8ARcx  访问密码 30a3 该工具包导入的数据格式就是我如下所说的封装方式,因此,在使用该算法包时,需要把自己的数据进行封装一下. 通过matlab打开,可以知道twonorm.mat里面还封装了两个.mat文件. 我们看看工具包的作者给的tutorial 部分源码如下: 的源码如下: 说明

点击table中的某一个td,获得这个tr的所有数据

功能: 点击table中的某一个td,获得这个tr的所有数据 效果图 <html> <head> <script> function getData2(element){ document.getElementById("name").value=element.children[0].innerHTML; document.getElementById("xuehao").value=element.children[1].in

python- 按照日期格式(xxxx-xx-xx)每日生成一个文件

请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为2013-09-23.log, 并且把磁盘的使用情况写到到这个文件中. #!/usr/bin/env python #!coding=utf-8 import time import os new_time = time.strftime('%Y-%m-%d') //time.strftime()可以用来获得当前时间,可以将时间格式化为字符串 disk_status = os.popen('df -h').read

每日生成一个文件

要求: 请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为)2017-07-05.log, 并且把磁盘的使用情况写到到这个文件中,(不用考虑cron,仅仅写脚本即可) #!/bin/bash cd /root s=`date +%F` file=$s.log df -h >$file

linux中如何清空一个文件的内容

方法1: echo "" > /www.jbxue.com /xxx.log 方法2: echo "" >> /www.jbxue.com /xxx.log 方法3: 此命令能与“echo > /var/log/big.log”达到相同效果,不过,命令执行后,需要用“Ctrl + d”结束 方法4: clear > /opt/log/big.log 此命令会把big.log文件内容清空,而不删除文件 方法5: 同样的效果,用true.f

sts从mysql数据库中反向生成实体类

首先我们要在sts中建立mysql的数据库连接 1. 当点击ok之后,如果没有报错的话就应该是建立好了,我们可以点击查看这个数据库中所有的表 我们就可以再sts进行数据库操作了,具体如下: 点击如下按钮打开一个或者右键点击 open sql scrapbook 确定数据连接好之后,我们要去Hibernate的网站下载这个工具包.一个大约14M的ZIP压缩文件. http://jaist.dl.sourceforge.net/sourceforge/jboss/HibernateTools-3.2

sql 数据库中只靠一个数据,查询到所在表和列名

有时候我们想通过一个值知道这个值来自数据库的哪个表以及哪个字段,在网上搜了一下,找到一个比较好的方法,通过一个存储过程实现的.只需要传入一个想要查找的值,即可查询出这个值所在的表和字段名. 前提是要将这个存储过程放在所查询的数据库. 注:1步骤是创建存储过程,可以在任何一个数据库中使用,2步骤是调用它来查找数据库中所有牵扯到的列以及对应的表. 只需要一个数据 真是非常方便 一.首先 点击新建查询 ,左上角选择到自己的数据库,然后把下面这段复制进去  然后运行 CREATE PROCEDURE [