文件编码相关的一些工具函数

package com.opslab.util.algorithmImpl;

import com.opslab.util.FileUtil;
import com.opslab.util.CheckUtil;

import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.UnsupportedCharsetException;
import java.util.List;

/**
* 文件编码相关的一些工具函数
*/
public class FileEncodingUtil {
/**
* 把指定文件或目录转换成指定的编码
*
* @param fileName 要转换的文件
* @param fromCharsetName 源文件的编码
* @param toCharsetName 要转换的编码
*/
public static void convert(String fileName, String fromCharsetName, String toCharsetName) {
convert(new File(fileName), fromCharsetName, toCharsetName, null);
}

/**
* 把指定文件或目录转换成指定的编码
*
* @param file 要转换的文件或目录
* @param fromCharsetName 源文件的编码
* @param toCharsetName 要转换的编码
*/
public static void convert(File file, String fromCharsetName, String toCharsetName) {
convert(file, fromCharsetName, toCharsetName, null);
}

/**
* 把指定文件或目录转换成指定的编码
*
* @param fileName 要转换的文件或目录
* @param fromCharsetName 源文件的编码
* @param toCharsetName 要转换的编码
* @param filter 文件名过滤器
*/
public static void convert(String fileName, String fromCharsetName, String toCharsetName, FilenameFilter filter) {
convert(new File(fileName), fromCharsetName, toCharsetName, filter);
}

/**
* 把指定文件或目录转换成指定的编码
*
* @param file 要转换的文件或目录
* @param fromCharsetName 源文件的编码
* @param toCharsetName 要转换的编码
* @param filter 文件名过滤器
*/
public static void convert(File file, String fromCharsetName, String toCharsetName, FilenameFilter filter) {
if (file.isDirectory()) {
List<File> list = CheckUtil.valid(filter) ? FileUtil.listFileFilter(file, filter) :
FileUtil.listFile(file);
if (CheckUtil.valid(list)) {
for (File f : list) {
convert(f, fromCharsetName, toCharsetName, filter);
}
}
} else {
if (filter == null || filter.accept(file.getParentFile(), file.getName())) {
String fileContent = getFileContentFromCharset(file, fromCharsetName);
saveFile2Charset(file, toCharsetName, fileContent);
}
}
}

/**
* 以指定编码方式读取文件,返回文件内容
*
* @param file 要转换的文件
* @param fromCharsetName 源文件的编码
*/
public static String getFileContentFromCharset(File file, String fromCharsetName) {
String str = "";
if (!Charset.isSupported(fromCharsetName)) {
throw new UnsupportedCharsetException(fromCharsetName);
}
try (InputStream inputStream = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(inputStream, fromCharsetName)
) {
char[] chs = new char[(int) file.length()];
reader.read(chs);
str = new String(chs).trim();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}

/**
* 以指定编码方式写文本文件,存在会覆盖
*
* @param file 要写入的文件
* @param toCharsetName 要转换的编码
* @param content 文件内容
*/
public static void saveFile2Charset(File file, String toCharsetName, String content) {
if (!Charset.isSupported(toCharsetName)) {
throw new UnsupportedCharsetException(toCharsetName);
}
try (
OutputStream outputStream = new FileOutputStream(file);
OutputStreamWriter outWrite = new OutputStreamWriter(outputStream, toCharsetName)
) {
outWrite.write(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}

原文地址:https://www.cnblogs.com/chinaifae/p/10254634.html

时间: 2024-08-30 09:33:07

文件编码相关的一些工具函数的相关文章

Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() 获取文件编码,f.encoding() 获取文件在内存中的编号,f.fileno() 获取文件终端类型(tty.打印机等),f.isatty() 获取文件名,f.name() 判断文件句柄是否可移动(tty等不可移动),f.seekable() 判断文件是否可读,f.readable() 判断文件是

Java文件编码自动转换工具类

本篇随笔主要介绍了一个用java语言写的将一个文件编码转换为另一个编码并不改变文件内容的工具类: 通过读取源文件内容,用URLEncoding重新编码解码的方式实现. 1 public class ChangeFileEncoding { 2 public static int fileCount = 0; 3 public static String sourceFileRoot = "替换为要转换的源文件或源目录"; // 将要转换文件所在的根目录 4 public static

批量编码转化工具(实现文件编码的自动检测)

先看截图 工具对.c,.h,.cpp,.txt文件进行转换,其余类型文件,则仅仅拷贝到转换后的输出路径.这种处理是为了转换前和转换后的项目结构保持不变. 工具中一个重要的部分,是对文件编码的自动检测(选项为Auto的情况) 此部分使用了第三方组件(NonCodeNet) 调用代码如下: public string getFileEncoding(string filePath) { string uni = string.Empty; Stream stream = File.Open(file

Leetcode 与树(TreeNode )相关的题解测试工具函数总结

LeetCode收录了许多互联网公司的算法题目,被称为刷题神器.最近在剑指Offer上也刷了一些题目,发现涉及到数据结构类的题目,比如说"树"."链表"这种题目,如果想在本地IDE进行测试,除了完成题目要求的算法外,还需要写一些辅助函数,比如树的创建,遍历等,由于这些函数平时用到的地方比较多,并且也能加深对常用数据结构的理解,这里将Leetcode中与树(TreeNode)相关题目会用到的测试辅助函数做一个总结. 代码文件说明 LeetCode 剑指Offer在线编

php 获取文件信息相关基础函数

<?phpheader('content-type:text/html;charset=utf-8');date_default_timezone_set('PRC');/** * 文件信息相关API */$filename="./test1.txt";// $filename="test";//filetype($filename):获取文件的类型,返回的是文件的类型echo '文件类型为:',filetype($filename),'<br/>

Linux下查看文件编码,文件编码格式转换和文件名编码转换

linux相关   2008-10-07 10:46   阅读1392   评论0   字号: 大大  中中  小小  如果你需要在Linux中 操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是 UTF-8.下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换. 查看文件编码 在Linux中查看文件编码可以通过以下几种方式: 1.在Vim中可以直接查看文件编码 :set file

字符编码知识简介和iconv函数的简单使用

字符编码知识简介和iconv函数的简单使用 字符编码知识简介 我们知道,在计算机的世界其实只有0和1.期初计算机主要用于科学计算,而我们知道一个数,除了用我们常用对10进制表示,也可以用2进制表示,所以只有0和1就可以进行科学计算,但是为了便于计算,大神们还是向计算机中引入的编码,比如通常我们用补码表示一个负数.所以编码这个东西,是从一开始就伴随着计算机的.到现在,我们的生活已经完全离不开计算机了,计算机也不仅仅用于科学计算了,更多地应用系信息处理.那计算机怎样表示与我们生活息息相关的事物呢,一

解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换

一.Qt环境设置 文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单->工具->选项->文本编辑器->行为->文件编码:默认编码:System(简体中文windows系统默认指的是GBK编码,即下拉框选项里的GBK/windows-936-2000/CP936/MS936/windows-936) 二.编码知识科普Qt常见的两种编码是:UTF-8和GB

C语言(七)文件的相关操作

转载请标明出处: http://blog.csdn.net/u011974987/article/details/52354074 C语言文件的打开与关闭 在C语言中,文件操作都是由库函数来完成的,我们就来总结文件的相关的操作. 文件的打开(fopen函数) fopen() 函数用来打开一个文件,它的格式为: FILE *fopen(char *filename, char *type); filename为文件名(包括文件路径),type为打开方式,它们都是字符串.fopen() 会获取文件信