当前位置: 主页 > JAVA语言

java 保存文件 utf8-java utf8文件写

发布时间:2023-03-24 09:13   浏览次数:次   作者:佚名

点击上图,查看教学大纲和教案

批处理文件的编码

耿祥义

2021-03-04

摘要本文给出的程序可以将某个目录下的编码为ANSI的全部java源文件,一次性地分别转成编码为utf-8的java源文件(单击文章左下方的阅读原文可下载程序源代码)。

一.问题的提出

有人提出能否实现java源代码编码转换的批处理,即一次性地将若干个编码为ANSI的java源文件分别转成编码为utf-8的java源文件(用记事本打开源文件,选择另存,并将编码选择为utf-8,一个一个打开,再另存,有点麻烦)。我始终建议,除非源代码中用到GBK不支持的字符,否则选择ANSI编码保存。

如果保存java源文件时选择的编码是UTF-8,那么使用javac编译源文件时必须显式用-encoding参数,告知编译器使用怎样的编码解析、编译源文件,即-encodeing给出的值必须和源文件的编码相同(不显式使用-encodeing参数,那么默认该参数的值是GBK):

C:\chapter1> javac -encoding utf-8 Hello.java

ANSI编码在不同的系统中代表着不同的编码。在Windows简体中文系统下,ANSI 编码代表 GBK 编码,在Windows日文系统下,ANSI 编码代表 JIS 编码。GBK编码共收录了21003个汉字,完全兼容GB2312,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中、日、韩汉字(比如,日文的片假名等),并包含了BIG5编码中的所有汉字。如果Java源文件中使用的字符没有超出GBK支持的范围,保存源文件时就将编码选择为ANSI编码(保存到磁盘空间时,源文件中的汉字占用2个字节,ASCII字符占用1个字节)。

UTF-8编码支持Unicode字符集(见第2章),如果保存源文件时选择UTF-8编码,那么存储源文件时会多占用一些磁盘空间(一个汉字需占用3个字节)java 保存文件 utf8,UTF-8兼容GBK、BIG5、EUC-JP等多种国家的语言的编码。除非源文件中确实需要GBK以外的字符,教材中保存源文件时选择的编码均为ANSI编码。

二、问题的解决

只要将ANSI编码的Java源文件,全部读入到一个byte数组a中,并使用当前默认的编码(GBK),将a中的字符封装到String对象s中,然后再将s中的字符序列重新按用户需要的编码,比如uff-8,重新编码即可。

String s = new String (a);

byte utf8[] = s.getBytes("utf-8");

最后将数组utf8写入到文件即可java 保存文件 utf8,那么该文件的编码就是utf-8编码(细节见后面的ChangeToUTF8类的代码)。

三、程序源代码和运行效果

java utf8文件写_java 保存文件 utf8_excel utf8 保存

1.主类

import java.io.File;

import java.util.Scanner;

public class MainClass {

public static void main(String args[]) {

ChangeToUTF8 change = new ChangeToUTF8(); //负责把ANSI编码文件转化成UTF-8编码文件

System.out.println("该程序将某个磁盘目录中的\n编码是 ANSI(GBK)的所有java源文件\n"+

"分别转换为编码是utf-8的Java源文件");

System.out.println("输入java文件所在的磁盘绝对路径,\n例如,输入C:\\chapter1(回车确认):");

Scanner reader=new Scanner(System.in);

String fileDir = reader.nextLine();

File javaDir = new File(fileDir);

if(javaDir.isDirectory()==false){

System.out.println(fileDir+"不是磁盘目录 ");

System.exit(0) ;

}

FileAccept fileAccept = new FileAccept();

fileAccept.setExtendName("java");

File file[] =javaDir.listFiles(fileAccept);//返回java源文件

if(file == null){

System.out.println("没有java源文件");

System.exit(0) ;

}

System.out.println("转换后的java文件所在的磁盘路径是\n"+fileDir+"\\utf-8");

File javaUTFDir = new File(fileDir+"\\utf-8");

javaUTFDir.mkdirs();

change.changFlieToUTF8(javaUTFDir,file) ;//把ANSI编码文件转化成UTF-8编码文件

}

}

2.选择指定的扩展名的文件(主教材例子10.2)

import java.io.FilenameFilter;

import java.io.File;

public class FileAccept implements FilenameFilter {

private String extendName;

public void setExtendName(String s) {

extendName="."+s;

}

public boolean accept(File dir,String name) { //重写接口中的方法

return name.endsWith(extendName);

}

}

3.负责转换的类

import java.io.*;

public class ChangeToUTF8 {

//把数组file中的java源文件转换为编码是utf-8的Java源文件并保存在dir目录中

public void changFlieToUTF8(File dir,File[] file) {

for(int i=0;i

long length = file[i].length();

int n=-1;

byte [] a = new byte[(int)length];

try{

InputStream in = new FileInputStream(file[i]);

in.read(a);

String s = new String (a);

byte utf8[] = s.getBytes("utf-8");

in.close();

File utf8Java = new File(dir+"/"+file[i].getName());

FileOutputStream out = new FileOutputStream(utf8Java);

out.write(utf8);

}

catch(Exception e) {

System.out.println(e);

}

}

}

}