java判断文件编码或文本流编码的方法

合集下载

java getstring方法

java getstring方法

java getstring方法Java中的getString方法是一种用于获取字符串的方法。

该方法可以从不同的数据源中获取字符串,并将其作为返回值返回。

在本文中,我们将探讨这个方法的使用和一些相关的注意事项。

我们需要了解getString方法的具体用法。

在Java中,字符串是一种常用的数据类型,用于存储文本信息。

getString方法可以从不同的地方获取字符串,例如从用户输入、文件中读取或者从数据库中查询等。

这个方法的返回值是一个字符串,我们可以将其赋值给一个变量,或者直接使用它。

在使用getString方法时,我们需要注意一些细节。

首先,我们需要确保数据源中存在需要获取的字符串。

如果数据源为空或者字符串不存在,那么getString方法可能会返回null。

因此,在使用返回值前,我们应该先对其进行空值判断,以避免出现空指针异常。

getString方法有时需要传入参数来指定需要获取的字符串的具体位置或者条件。

这些参数的类型和用法根据具体的实现而定。

例如,在从数据库中查询字符串时,我们需要提供查询条件,如ID或者关键字。

在从文件中读取字符串时,我们需要提供文件路径或者文件流等。

我们需要注意getString方法的返回值类型。

在Java中,字符串是一个不可变的类,即一旦创建就不能修改。

因此,getString方法返回的字符串也是不可变的。

如果我们需要对字符串进行修改或者拼接操作,可以使用其他方法,如StringBuilder或者StringBuffer。

getString方法还可以接受一些可选的参数,用于设置获取字符串的一些特殊选项。

例如,我们可以指定字符串的编码格式、忽略大小写、限制字符串的长度等。

这些参数的具体用法和效果也取决于具体的实现。

在实际使用中,我们需要根据具体的需求选择合适的getString方法,并了解其用法和注意事项。

在使用之前,我们可以查阅相关文档或者参考示例代码,以便更好地理解和掌握这个方法。

转换流:指定编码读取文本文件InputStreamReader和写出文本文件OutputS。。。

转换流:指定编码读取文本文件InputStreamReader和写出文本文件OutputS。。。

转换流:指定编码读取⽂本⽂件InputStreamReader和写出⽂本⽂件OutputS。

⼀、字符编码和字符集1、字符编码计算机中储存的信息都是⽤⼆进制数表⽰的,⽽我们在屏幕上看到的数字、英⽂、标点符号、汉字等字符是⼆进制数转换之后的结果。

按照某种规则,将字符存储到计算机中,称为编码。

反之,将存储在计算机中的⼆进制数按照某种规则解析显⽰出来,称为解码。

如说,按照A规则存储,同样按照A规则解析,那么就能显⽰正确的⽂本f符号。

反之,按照A规则存储,再按照B规则解析,就会导致乱码现象。

字符编码 Character Encoding : 就是⼀套⾃然语⾔的字符与⼆进制数之间的对应规则。

在计算机中,所有的数据在存储和运算时都要使⽤⼆进制数表⽰(因为计算机⽤⾼电平和低电平分别表⽰1和0),例如,像a、b、c、d这样的52个字母(包括⼤写)以及0、1等数字还有⼀些常⽤的符号(例如*、#、@等)在计算机中存储时也要使⽤⼆进制数来表⽰,⽽具体⽤哪些⼆进制数字表⽰哪个符号,当然每个⼈都可以约定⾃⼰的⼀套(这就叫编码),⽽⼤家如果要想互相通信⽽不造成混乱,那么⼤家就必须使⽤相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统⼀规定了上述常⽤符号⽤哪些⼆进制数来表⽰。

2、字符集字符集 Charset :也叫编码表。

是⼀个系统⽀持的所有字符的集合,包括各国家⽂字、标点符号、图形符号、数字等。

计算机要准确的存储和识别各种字符集符号,需要进⾏字符编码,⼀套字符集必然⾄少有⼀套字符编码。

常见字符集有ASCII字符集、GBK 字符集、Unicode字符集等。

可见,当指定了编码,它所对应的字符集⾃然就指定了,所以编码才是我们最终要关⼼的。

1)、ASCII字符集ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的⼀套电脑编码系统,⽤于显⽰现代英语,主要包括控制字符(回车键、退格、换⾏键等)和可显⽰字符(英⽂⼤⼩写字符、阿拉伯数字和西⽂符号)。

JAVA高级考试题

JAVA高级考试题

一、单项选择题(共36题,36分)1. 已知一个引用类型变量myvar指向了一个流对象,在程序中出现了如下语句:myvar.flush(); myvar.close(); 则myvar所指向的对象一定是:(1 分)A) 输入流B) 输出流C) 字符流D) 字节流—标准答案:B2. 下面关于ServerSocket的描述错误的是:(1 分)A) ServerSocket表示服务器端的倾听Socket,等待客户机发起TCP连接。

B) ServerSocket仅用于监听客户端的发起的连接请求,一旦受到客户端请求即返回一个Socket与客户端通信。

ServerSocket并不负责与客户单通信。

C) ServerSocket通过accept()方法监听等待客户端的请求,未收到客户端的连接请求之前当前线程处于阻塞状态。

D) 一个ServerSocket只能在一个端口监听,因此一个ServerSocket只能接收到一个客户端请求。

—标准答案:D3. 关于字符流的说法正确的是:(1 分)A) 字符流是双字节流,因此使用字节流读取两次与与字符流读取一次的效果完全一致。

B) 字符流会涉及字符编码的转换。

C) 通过字符流可以复制word文档。

D) 通过字符流将文本写入文件,则文件中的编码一定是双字节编码。

—标准答案:B4. 下面有关Java线程的说法正确的是:(1 分)A) wait()方法是Thread类特有的方法。

B) 任何对象都有wait()方法。

C) 任何情况下都可以调用任何对象的wait()方法,使当前线程等待。

D) 只有锁对象有notify()方法,其它对象没有该方法。

—标准答案:B5. 在Java中按输入和输出方向可以将流分为哪几类?(1 分)A) 输入流和输出流B) 字节流和字符流C) 节点流和处理流D) 对象流和数据流—标准答案:A6. 下面关于字节流说法正确的是:(1 分)A) 使用字节流仅可以复制二进制文件,不能复制文本文件。

Java日常练习题,每天进步一点点(60)

Java日常练习题,每天进步一点点(60)

Java⽇常练习题,每天进步⼀点点(60)⽬录1、假设 A 类有如下定义,设 a 是 A 类同⼀个包下的⼀个实例,下列语句调⽤哪个是错误的?()2、Java中基本的编程单元为:3、下列代码的执⾏结果是:()4、给定以下JAVA代码,这段代码运⾏后输出的结果是()5、以下哪⼀项正则能正确的匹配⽹址: /video/av21061574 ()6、下列关于异常处理的描述中,错误的是()。

7、以下哪项不属于java类加载过程?8、对于⽂件的描述正确的是()9、有关hashMap跟hashtable的区别,说法正确的是?10、java中 String str = "hello world"下列语句错误的是?答案汇总:总结承蒙各位厚爱,我们⼀起每天进步⼀点点!(⿏标选中空⽩处查看答案)1、假设 A 类有如下定义,设 a 是 A 类同⼀个包下的⼀个实例,下列语句调⽤哪个是错误的?()class A{ int i; static String s; void method1() { } static void method2() { } }正确答案:CA System.out.println(a.i);B a.method1();C A.method1();D A.method2()题解:1、⾮静态⽅法只能通过实例对象来调⽤,不能直接通过类名调⽤。

静态⽅法(static)才能通过类名直接调⽤.2、类中变量:除了private权限外,其他权限的变量(没有表⽰默认default),均可以⽤“对象.变量名”来调⽤。

对于private变量,即使使⽤static,也不能⽤“类.变量名”来调⽤私有变量。

只能通过类中的public get()⽅法来调⽤。

类中⽅法:除了private权限外,其他权限的⽅法(没有表⽰默认default),均可以⽤“对象.⽅法名”来调⽤。

private ⽅法可以⽤java反射机制调⽤。

软件开发编码规范

软件开发编码规范

软件安全开发编码规范1. 代码编写1) 开发人员应保证工程中不存在无用的资源(如代码、图片文件等)。

2) 代码中每个类名上的注释必须留下创建者和修改者的名字。

3) 每个需要import的类都应使用一行import声明,不得使用import xxx.*。

4) System.out.println()仅在调试时使用,正式代码里不应出现。

5) 开发人员编写代码时应遵循以下命名规则:●Package 名称应该都是由一组小写字母组成;●Class 名称中的每个单词的首字母必须大写;●Static Final 变量的名称全用大写,并且名称后加注释;●参数的名称必须和变量的命名规范一致;●使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名称。

6) 代码应该用unix的格式,而不是windows的。

7) exit 除了在main 中可以被调用外,其他的地方不应被调用。

8) 代码中应尽量使用interfaces,不要使用abstract类。

9) 在需要换行的情况下,尽量使用println 来代替在字符串中使用的"\n"。

10) 涉及HTML的文档,尽量使用XHTML1.0 transitional文件类型,其中所有HTML标签都应关闭。

11) 在HTML、JavaScript、XML代码中,缩进应为两个空格,不得使用Tab。

12) HTML标签的name和id属性的命名方式应与Java变量名相同。

13) 在需要经常创建开销较大的对象时,开发人员应考虑使用对象池。

14) 在进行log的获取时开发人员应尽量使用isXXXEnabled。

15) log的生成环境上尽量避免输出文件名和行号。

16) 产品中不要包含后门代码,隔离系统中的后门代码,确保其不能出现在产品中。

作为一种特殊的调试代码,后门访问代码是为了使开发者和测试工程师访问一部分终端用户不能访问的程序代码。

但是,如果后门代码被留到产品中,对攻击者来说,它就是一条不需要通过正常安全手段来攻陷系统的通路。

软件编码规范详述

软件编码规范详述

软件编码规范中国人民银行清算总中心支付系统开发中心文档修订记录注:变化状态:A—增加,M—修改,D—删除目录第一篇C/C++编码规范5第一章代码组织5第二章命名72.1文件命名72.2变量命名72.3常量与宏命名82.4类命名82.5函数命名82.6参数命名9第三章注释103.1文档化注释103.2语句块注释153.3代码维护注释18第四章编码风格194.1排版风格194.2头文件234.3宏定义244.4变量与常量274.5条件判断294.6空间申请与释放304.7函数编写304.8类的编写334.9异常处理364.10特殊限制36第五章编译38第六章ESQL/C编码43第二篇JAVA编码规范44第一章代码组织45第二章命名482.1包命名482.2类命名482.3接口命名482.4方法命名482.5变量命名482.6类变量命名482.7常量命名492.8参数命名49第三章注释503.1文档化注释503.2语句块注释543.3代码维护注释55第四章编码风格574.1排版风格574.2包与类引用624.3变量与常量624.4类编写634.5方法编写644.6异常处理674.7特殊限制67第五章编译69第六章JSP编码706.1文件命名及存放位置706.2内容组织706.3编码风格716.4注释746.5缩进与对齐746.6表达式756.7JavaScript75第三篇POWERBUILDER编码规范76第一章代码组织77第二章命名782.1文件命名782.2对象命名782.3变量命名802.4常量命名812.5函数与事件命名812.6参数命名81第三章注释813.1文档化注释813.2语句块注释833.3代码维护注释84第四章编码风格854.1界面风格854.2排版风格884.3变量与常量914.4条件判断914.5空间申请与释放924.6函数编写924.7特殊限制92第五章SQL编码93前言程序编码是一种艺术,既灵活又严谨,充满了创造性与奇思妙想。

Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Prope。。。

Java⾃学第10期——File类与IO流(输⼊输出流、处理流、转换流、缓冲流、Prope。

1、IO简介IO(输⼊输出)通过java.io包下的类和接⼝来⽀持,包下包括输⼊、输出两种IO流,每种输⼊输出流⼜可分为字符流和字节流两⼤类。

2、File类File类是io包下与平台⽆关的⽂件和⽬录,File能新建、删除、重命名⽂件和⽬录,不能访问⽂件本⾝,后者需要使⽤输⼊输⼊流。

2.1 构造⽅法File类的构造⽅法:File(File parent, String child) 参数:⽗路径,⼦路径根据 parent 抽象路径名和 child 路径名字符串创建⼀个新 File 实例。

File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建⼀个新 File 实例。

File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建⼀个新 File 实例。

File(URI uri)通过将给定的 file: URI 转换为⼀个抽象路径名来创建⼀个新的 File 实例。

2.2 静态⽅法File类静态⽅法:static String pathSeparator()与系统有关的路径分隔符,为了⽅便,它被表⽰为⼀个字符串。

static char pathSeparatorChar()与系统有关的路径分隔符。

static String separator()与系统有关的默认名称分隔符,为了⽅便,它被表⽰为⼀个字符串。

static char separatorChar()与系统有关的默认名称分隔符。

2.3 常⽤⽅法:2.3.1 获取相关public String getAbsolutePath()返回此File的绝对路径名字符串。

public String getPath()将此File转换为路径名字符串。

public String getName()返回由此File表⽰的⽂件或⽬录的名称。

Java中的字节,字符与编码,解码

Java中的字节,字符与编码,解码ASCII编码ASCII码主要是为了表⽰英⽂字符⽽设计的,ASCII码⼀共规定了128个字符的编码(0x00-0x7F),只占⽤了⼀个字节的后⾯7位,最前⾯的1位统⼀规定为0。

ISO-8859-1编码为了扩展覆盖其他语⾔字符,ISO组织在ASCII码基础上⼜制定了⼀系列标准⽤来扩展ASCII编码,它们是ISO-8859-1~ISO-8859-15,其中ISO-8859-1应⽤得最⼴泛。

ISO-8859-1仍然是单字节编码,它总共能表⽰256个字符。

ISO-8859-1向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII⼀致。

因为ISO-8859-1编码范围使⽤了单字节内的所有空间,在⽀持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。

换⾔之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。

Unicode,UCS2和UCS4Unicode是为整合全世界的所有语⾔⽂字⽽诞⽣的。

任何⽂字在Unicode中都对应⼀个值,这个值称为代码点(Code Point),常写成 U+XXXX的格式。

⽽⽂字和代码点之间的对应关系就有UCS-2和UCS-4。

UCS-2:⽤两个字节来表⽰代码点,其取值范围为 U+0000~U+FFFF。

UCS-4:为了能表⽰更多的⽂字,⼈们⼜提出了UCS-4,即⽤四个字节表⽰代码点。

它的范围为 U+00000000~U+7FFFFFFF,其中U+00000000~U+0000FFFF和UCS-2是⼀样的。

要注意,UCS-2和UCS-4只规定了代码点和⽂字之间的对应关系,并没有规定代码点在计算机中如何存储。

规定存储⽅式的称为UTF(Unicode Transformation Format),其中应⽤较多的就是UTF-8和UTF-16了。

UTF-8,UTF-16,UTF-32UTF-32是对应于UCS-4,不常⽤。

18.Javaweb中文件的上传和下载【重要】

18.Javaweb中⽂件的上传和下载【重要】Javaweb中⽂件的上传和下载⽂件上传⽂件上传指的是⽤户通过浏览器向服务器上传某个⽂件,服务器接收到该⽂件后会将该⽂件存储在服务器的硬盘中,通常不会存储在数据库中,这样可以减轻数据库的压⼒并且在⽂件的操作上更加灵活,常见的功能是上传头像图⽚。

⽂件上传的原理所谓的⽂件上传就是服务器端通过request对象获取输⼊流,将浏览器端上传的数据读取出来,保存到服务器端。

⽂件上传的要求提供form表单,表单的提交⽅式必须是post【get请求装不下那么多】form表单中的enctype属性必须是 multipart/form-data 【照着做就⾏】表单中提供input type=”file”上传输⼊域 【⽂件那个表单】先来个表单:<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><figure><img src=""></figure><form action="#" method="post" accept-charset="utf-8" enctype="multipart/form-data"> <!--# 提交地址记得改!--><input type="file" name="photo"><br><input type="submit" value="上传头像"></form></body></html>来个Servlet来接收⼀下这个图⽚:package upload;import java.io.IOException;import java.io.InputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** ⽂件上传例⼦*/public class file extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取请求的输⼊流InputStream is = request.getInputStream();//读取输⼊流中的数据int leng = 0;byte[] bytes = new byte[1024];while ((leng = is.read(bytes)) != -1) {//先打印控制台看看System.out.println(new String(bytes,0,leng));}}}打印出来的数据:------WebKitFormBoundarypM4ZEsxzVdl0NfZVContent-Disposition: form-data; name="photo"; filename="4-2 鍥剧墖鍒囨崲鏁堟灉[20210508-164643].jpg"Content-Type: image/jpeg反正⼀堆乱码但是头部我们是看的懂的就是⼀些标签的属性和上传的照⽚名字!和⽂件类型!如何解决?请看:FileUpload⼯具的使⽤在实际开发中通常会借助第三⽅⼯具来实现上传功能,应⽤较多的是apache旗下的Commons-fileupload。

Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题,及处理方法

Java读取Unicode⽂件(UTF-8等)时碰到的BOM⾸字符问题,及处理⽅法转载:https:///clementad/article/details/471685732015-18-01修改:增加 apache commons io 处理⽅法。

在Windows下⽤⽂本编辑器创建的⽂本⽂件,如果选择以UTF-8等Unicode格式保存,会在⽂件头(第⼀个字符)加⼊⼀个BOM标识。

这个标识在Java读取⽂件的时候,不会被去掉,⽽且String.trim()也⽆法删除。

如果⽤readLine()读取第⼀⾏存进String⾥⾯,这个String的length会⽐看到的⼤1,⽽且第⼀个字符就是这个BOM。

这种情况会造成⼀些⿇烦,⽐如在读取ini⽂件的时候,如果想判断第⼀⾏是不是以“[”开头就⽆法正确判断。

幸好,Java在读取Unicode⽂件的时候,会统⼀把BOM变成“\uFEFF”,这样的话,就可以⾃⼰⼿动解决了(判断后,⽤substring()或replace()去除掉这个BOM):1.if(line.startsWith("\uFEFF")){2.//line = line.substring(1);3.line = line.replace("\uFEFF", "");4.}然⽽,这种⽅法并不是完美的,如果⽣成jar⽂件在windows下运⾏,还是有问题。

终极的解决⽅法是使⽤apache commons io提供的BOMInputStream:1.<dependency>2.<groupId>commons-io</groupId>3.<artifactId>commons-io</artifactId>4.<version>2.4</version>5.</dependency>1.BufferedReader reader = null;2.try {3.//reader = new BufferedReader(new FileReader(file));4.5.//使⽤BOMInputStream⾃动去除UTF-8中的BOM6.reader = new BufferedReader(new InputStreamReader(new BOMInputStream(new FileInputStream(file))));7.8.String str = null;9.//⼀次读⼊⼀⾏(⾮空),直到读⼊null为⽂件结束10.while ((str = reader.readLine()) != null) {11.}什么是BOM?BOM = Byte Order MarkBOM是Unicode规范中推荐的标记字节顺序的⽅法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

判定文件编码或文本流编码的方法
在程序中,文本文件经常用来存储标准的ASCII码文本,比如英文、加减乘除等号这些运算符号。

文本文件也可能用于存储一些其他非ASCII字符,如基于GBK的简体中文,基于GIG5的繁体中文等等。

在存储这些字符时需要正确指定文件的编码格式;而在读取这些文本文件时,有时候就需要自动判定文件的编码格式。

按照给定的字符集存储文本文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。

其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8。

由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。

对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:
Java代码
1java.io.File f=new java.io.File("待判定的文本文件名");
2try{
3java.io.InputStream ios=new java.io.FileInputStream(f);
4byte[] b=new byte[3];
5ios.read(b);
6ios.close();
7if(b[0]==-17&&b[1]==-69&&b[2]==-65)
8System.out.println(f.getName()+"编码为UTF-8");
9else System.out.println(f.getName()+"可能是GBK");
10}catch(Exception e){
11 e.printStackTrace();
12}
上述代码只是简单判定了是否是UTF-8格式编码的文本文件,如果项目对要判定的文本文件编码不可控(比如用户上传的一些HTML、XML等文本),可以采用一个现成的开源项目:cpdetector,它所在的网址是:/。

它的类库很小,只有500K左右,利用该类库判定文本文件的代码如下:
Java代码
13/*------------------------------------------------------------------------
14detector是探测器,它把探测任务交给具体的探测实现类的实例完成。

15cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add
方法
16加进来,如ParsingDetector、JChardetFacade、ASCIIDetector、UnicodeDetector。

17detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到

18字符集编码。

19--------------------------------------------------------------------------*/
20cpdetector.io.CodepageDetectorProxy detector =
21cpdetector.io.CodepageDetectorProxy.getInstance();
22/*-------------------------------------------------------------------------
23ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于
24指示是否显示探测过程的详细信息,为false不显示。

25---------------------------------------------------------------------------*/
26detector.add(new cpdetector.io.ParsingDetector(false));
27/*--------------------------------------------------------------------------
28JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文
件的编码
29测定。

所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以
30再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。

31---------------------------------------------------------------------------*/
32detector.add(cpdetector.io.JChardetFacade.getInstance());
33//ASCIIDetector用于ASCII编码测定
34detector.add(cpdetector.io.ASCIIDetector.getInstance());
35//UnicodeDetector用于Unicode家族编码的测定
36detector.add(cpdetector.io.UnicodeDetector.getInstance());
37java.nio.charset.Charset charset = null;
38File f=new File("待测的文本文件名");
39try {
40charset = detector.detectCodepage(f.toURL());
41} catch (Exception ex) {ex.printStackTrace();}
42if(charset!=null){
43System.out.println(f.getName()+"编码是:"+());
44}else
45System.out.println(f.getName()+"未知");
上面代码中的detector不仅可以用于探测文件的编码,也可以探测任意输入的文本流的编码,方法是调用其重载形式:
Java代码
46charset=detector.detectCodepage(待测的文本输入流,测量该流所需的读入字节
数);
上面的字节数由程序员指定,字节数越多,判定越准确,当然时间也花得越长。

要注意,字节数的指定不能超过文本流的最大长度。

判定文件编码的具体应用举例:
属性文件(.properties)是Java程序中的常用文本存储方式,象STRUTS框架就是利用属性文件存储程序中的字符串资源。

它的内容如下所示:
Java代码
47#注释语句
48属性名=属性值
读入属性文件的一般方法是:
Java代码
49FileInputStream ios=new FileInputStream("属性文件名");
50Properties prop=new Properties();
51prop.load(ios);
52ios.close();
利用java.io.Properties的load方法读入属性文件虽然方便,但如果属性文件中有中文,在读入之后就会发现出现乱码现象。

发生这个原因是load方法使用字节流读入文本,在读入后需要将字节流编码成为字符串,而它使用的编码是“iso-8859-1”,这个字符集是ASCII码字符集,不支持中文编码,所以这时需要使用显式的转码:
Java代码
53String value=prop.getProperty("属性名");
54String encValue=new String(value.getBytes("iso-8859-1"),"属性文件的实际编
码");
在上面的代码中,属性文件的实际编码就可以利用上面的方法获得。

当然,象这种属性文件是项目内部的,我们可以控制属性文件的编码格式,比如约定采用Windows内定的GBK,就直接利用"gbk"来转码,如果约定采用UTF-8,也可以是使用"UTF-8"直接转码。

如果想灵活一些,做到自动探测编码,就可利用上面介绍的方法测定属性文件的编码,从而方便开发人员的工作。

相关文档
最新文档