1. 程式人生 > >使用IO流將數據庫中數據生成一個文件,結果使用Notepad++打開部分數據結尾出現NUL

使用IO流將數據庫中數據生成一個文件,結果使用Notepad++打開部分數據結尾出現NUL

port pub != 生成 lis [] light odi byte

場景描述:

  項目中通過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;
    }

  

使用IO流將數據庫中數據生成一個文件,結果使用Notepad++打開部分數據結尾出現NUL