java File_encoding属性

今天给客户发版本,突然发现报表导出内容为空,大小0字节.感到非常奇怪,因为开发的时候都好好的,打包出来怎么会出现异常. 细看才后发现是 file_encoding这个java系统属性编码方式设置导致的. 开发的时候一般我们都在eclipse中把项目的 text file  encoding 这个属性设置为utf-8. 如图:

开发完,脱离eclipse之后我们同样需要指定该编码方式去执行java程序, 否则 当你输出System.getProperty("file.encoding")这个属性的时候,得到的结果就是系统默认的编码方式,

windows下一般是GBK. 指定编码方式也很简单,  java  -Dfile.encoding=utf-8   xxxx (需要执行的class文件)

下面来看下 file.encoding 这个属性的英文解释.

This property is used for the default encoding in Java, all readers
and writers would default to use this property. “file.encoding” is set to the default locale of Windows operationg system since Java 1.4.2. System.getProperty(“file.encoding”) can be used to access this property. Code such as System.setProperty(“file.encoding”,
“UTF-8”) can be used to change this property. However, the default encoding can not be changed dynamically even this property can be changed. So the conclusion is that the default encoding can’t be changed after JVM starts. “java -Dfile.encoding=UTF-8” can
be used to set the default encoding when starting a JVM. I have searched for this option Java official documentation. But I can’t find it.

大致的意思主要下面几点:

1. java内所有的reader和 writer操作默认都是用 file.encoding这个系统属性作为编码方式的,看代码:

		//way1
		String html1="<html>...</html>";
		FileWriter writer1=new FileWriter(new File("C:\\xxxx.html"));
		writer1.write(html1);
		writer1.close();

		//way2
		String html2="<html>...</html>";
		OutputStreamWriter writer2=new OutputStreamWriter(new FileOutputStream
				(new File("C:\\xxxx.html")),"utf-8");
		writer2.write(html2);
		writer2.close();

第一种方法默认会用 file.encoding 这个属性对文件进行编码,然后输出.一旦你执行class文件的时候没有指定该属性, 默认就会用操作系统本身编码方式,如gbk等.

第二种方式指定了文件编码方式,并输出.

偶项目中的遇到异常就是由第一种方法导致的,刚开始我用第二种方式去解决的,但是这只能解决这一地方,其他没发现的就不好解决了. 更好的解决,看注意点2.

2.JVM启动之前如果未指定file.encoding这个属性,这个属性就会默认为操作系统编码方式, JVM启动如果指定了file.encoding这个属性,整个项目都会用这个属性

作为reader和writer操作的默认编码方式.

so,解决问题最好的方式就是在启动项目时就知道file.encoding这个属性,后续的读写操作没有特殊编码需要的划,都可以继承过来使用.

java File_encoding属性

时间: 2024-10-08 07:47:24

java File_encoding属性的相关文章

java System属性

java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装目录 java.vm.specification.version Java 虚拟机规范版本 java.vm.specification.vendor Java 虚拟机规范供应商 java.vm.specification.name Java 虚拟机规范名称 java.vm.version Java 虚

Stripes视图框架Java对象属性验证和prototype.js Ajax的测试

Stripes视图框架Java对象属性验证,它允许对字段设置是否必须填写,对数字大小进行限制等.我用prototype.js Ajax 将验证后的数据及时地展示出来,下面来看程序. 1.编写User实体类 此用户共三个属性: name.email.age. package com.boonya.stripes.entity;      public class User {              private String name;              private String

spring:使用&lt;prop&gt;标签为Java持久属性集注入值

spring:使用<prop>标签为Java持久属性集注入值 使用 spring 提供的<prop>为Java持久属性集注入值,也就是向 java.util.Properties 对象中注入值. <props> 是简化了的 <map> ,该元素对应配置类型为 java.util.Properties 的对象依赖. 因为Properties 只能指定 String 类型的键和值,所以 <props> 的配置简化很多,只有固定的格式. 1.创建 Te

atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug

atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug 1. core.setProperty(o, "materialId", null); 1 2. Java Reflection (JAVA反射) 1 3. 反射的用处 2 4. Java类反射中所必须的类: 2 BeanUtils.copyProperty 2 5. BeanUtils.setProperty 2 6. 参考 4 1. core.setProperty(

Java操作属性文件,支持新增或更新多个属性

Java操作属性文件,支持新增或更新多个属性 一.更新或新增单个属性的方法 /** * 写入properties信息 * @param filePath 绝对路径(包括文件名和后缀名) * @param parameterName 名称 * @param parameterValue 值 */ public static void writeProperties(String filePath, String parameterName, String parameterValue) { Pro

java的属性只能在类里面 方法外面定义

java的属性只能在类里面 方法外面定义 区别于python:python 既能在类里面(类属性) 又能在方法里面定义属性(实例属性) 原文地址:https://www.cnblogs.com/classmethond/p/9901993.html

Java中属性和字段的区别 ,很多人都分不开吗.尤其是反射技术之上的mybatis,spring配置,jstl 标签

Java中的属性,通常可以理解为其属名性时根据get和set方法名得出的. 而字段,通常叫做"对象成员". 其规则是:去掉get或set后其剩余的字符串,如果第二个字母是小写的,则把第一个字母也变成小写 getAge---->age getCPU---->CPU 属性只局限于类中方法的声明,并不与类中其他成员相关,属于javabean的范畴.例如: void setA(String s){} String getA(){} 当一个类中拥有这样一对方法时,我们可以说,这个类中

依据不同的操作系统读取配置文件/java读取属性文件代码

package cn.com.css.common.util; /** * @brief OSEnum.java 操作系统的枚举 * @attention * @author 涂作权 * @date 2014年4月3日 * @note begin modify by null */ public enum EOSPlatForm { Any("any"), Linux("Linux"), Mac_OS("Mac OS"), Mac_OS_X(&q

Java操作属性文件之工具类

最近空闲时间整理一下平时常用的一下工具类,重复造轮子实在是浪费时间,如果不正确或者有待改善的地方,欢迎指教... package com.hsuchan.business.utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Propertie