-
2021-02-28 12:43:55
public class OutputStreamWriterTest {
public static void main(String[] args) {
try {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("e:\\test.txt"));
osw.write("学海无涯,维勤是岸!!!");
System.out.println("文件默认编码:" + osw.getEncoding());// 使用getEncoding()方法取得当前系统的默认字符编码
osw.close();
/*
* 如果在调用FileOutputStream的构造方法时没有加入true,那么新加入的字符串就会替换掉原来写入的字符串,
* 在调用构造方法时指定了字符的编码,新写入的字符,会使用新指定的编码
*/
osw = new OutputStreamWriter(new FileOutputStream("e:\\test.txt", true), "ISO8859_1");
osw.write("他山之石,可以攻玉!!!");
System.out.println("修改文件编码之后getEncoding:" + osw.getEncoding());
osw.close();
System.out.println(codeString("e:\\test.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
}
}
public static String codeString(String fileName) throws Exception {
BufferedInputStream bin = new BufferedInputStream(new FileInputStream(fileName));
int p = (bin.read() << 8) + bin.read();
String code = null;
// 其中的 0xefbb、0xfffe、0xfeff、0x5c75这些都是这个文件的前面两个字节的16进制数
switch (p) {
case 0xefbb:
code = "UTF-8";
break;
case 0xfffe:
code = "Unicode";
break;
case 0xfeff:
code = "UTF-16BE";
break;
case 0x5c75:
code = "ANSI|ASCII";
break;
default:
code = "GBK";
}
return code;
}
}
更多相关内容 -
用java修改文件的编码
2017-07-23 19:31:34用java修改文件的编码 -
java获取文件编码格式
2018-01-26 15:39:52通过webview打开html文件有可能编码不同就会乱码,所以要获取html文件的编码格式动态改变webview编码设置 -
java 更改文件编码
2021-03-13 04:31:20直接上代码import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FilenameFilter;import java.io....直接上代码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class TransCoding {
//需要转编码的目录
private static String path = "C:\\Users\\Administrator\\Desktop\\123\\HelpUDcAppBG";
//定义另存目录。若不赋值(但此属性的值必须为字符串,如”“,不能为null)
//即当前目录下文件转变编码后会覆盖,包括子目录及其文件
private static String directory = "C:\\Users\\Administrator\\Desktop\\12";
//定义要转的文件类型。若不赋值(但此属性的值必须为字符串,如”“,不能为null)
//即转变当前目录下所有类型文件,包括子目录及其文件。
private static String typeName = "";
//要转的文件当前编码,默认GBK。因为一般硬盘文件默认ANSI,在中国即是GBK编码。
private static String codeBefore = "GB2312";
//要转的文件转后编码,默认UTF-8。
//需要注意的是如果被编码的文件是全英文的,没有汉字,那么即使下面指定UTF-8,
//有些计算机也不能生成UTF-8文件,可能与windows的转码有关,但全英文不影响性能。
private static String codeAfter = "UTF-8";
public static void main(String[] args){
File dir = new File(path);
File dirPath = new File(directory);
change(dir,dirPath,typeName);
}
public static void change(File dir,File dirPath,final String typeName){
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter =null;
//获得当前目录下的所有符合条件的对象,包括目录。
File[] files = dir.listFiles(new FilenameFilter(){
public boolean accept(File dir,String name){
//如果是目录,直接返回true,意味着可以直接加入listFiles方法里的集合中。
if(new File(dir,name).isDirectory()){
return true;
};
return name.endsWith(typeName);
}
});
for (File file : files) {
//如果没有指定另存目录名,此为当前目录的绝对路径
String pathAbsolute = null;
//如果没有指定另存目录名,此为当前文件编码后的绝对路径
File fileModify = null;
//定义另存目录对象
File createDir = null;
//定义另存目录中的文件对象
File createFile = null;
//如果当前file对象是一个目录,再调用此方法,递归。
if(file.isDirectory()){
//获取此目录绝对路径
String path = file.getAbsolutePath();
//截掉当前目录
String path2 = path.substring(0,path.lastIndexOf("\\"));
//获取到上级目录
String path3 = path2.substring(path2.lastIndexOf("\\"));
//封装成对象方便传递。
File file2 =null;
if(dirPath.getName()==null||dirPath.getName().trim()==""){
change(file,dirPath,typeName);
}else{
file2 = new File(dirPath,path3);
change(file,file2,typeName);
}
}else{//不是目录,直接转码
try {
//读取目录下文件,并按指定编码读取。
bufferedReader = new BufferedReader(new InputStreamReader(
new FileInputStream(file.getAbsolutePath()),codeBefore));
//如果另存目录为空,表示存放到当前目录。
if(dirPath.getName()==null||dirPath.getName()==""){
//绝对路径名 如 D:\action\1.txt
pathAbsolute = file.getAbsolutePath();
//截取后的路径 如D:\action\
String path1 = pathAbsolute.substring(0,
pathAbsolute.lastIndexOf(file.getName()));
//新路径 如 D:\action\11.txt
String pathModify = path1+"1"+file.getName();
fileModify = new File(pathModify);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fileModify),codeAfter));
}else{//否则,将转码后的文件写入指定的目录
String path = file.getAbsolutePath();
String fileName = file.getName();
//获取文件所在的绝对路径目录
String path2 = file.getAbsolutePath().substring(0,
path.lastIndexOf(fileName)-1);
//获取文件所在的上一级目录
String path3 = path2.substring(path2.lastIndexOf("\\"));
//创建另存目录
createDir = new File(dirPath,path3);
//这里是创建多级目录,防止条件转码时(例如后缀名为.java或.txt),
//符合条件的文件太深,造成目录创建失败,导致IO写入异常。
createDir.mkdirs();
createFile = new File(createDir,fileName);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(createFile),codeAfter));
}
String line = null;
while((line=bufferedReader.readLine())!=null){
bufferedWriter.write(line);
bufferedWriter.newLine();
}
//我觉得这里写不写都一样,最终关闭流的时候也会刷新。
//如果写入while循环里会降低效率,每行都要刷新。
//因为那样写入磁盘的次数就增多了
bufferedWriter.flush();
} catch (Exception e) {
if(createDir!=null)
createDir.deleteOnExit();
if(createFile!=null)
createFile.deleteOnExit();
throw new RuntimeException("读写错误"+e);
}
finally{
if(bufferedReader!=null){
try {
bufferedReader.close();
} catch (IOException e) {
throw new RuntimeException("输入流关闭错误");
}
}
if(bufferedWriter!=null){
try {
bufferedWriter.close();
if(fileModify!=null){
//将原文件删除
file.delete();
//创建一个和原文件同名的File对象
File file3 = new File(pathAbsolute);
//将编码后的文件名改成原文件名
fileModify.renameTo(file3);
}
} catch (IOException e) {
throw new RuntimeException("输出流关闭错误");
}
}
}
}
}
}
}
-
java修改文件字符编码
2021-02-12 23:06:13import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamRead...import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class CharsetEcd {
String ReaderEcd;//读取文件的字符编码设置
String outEcd;//写入文件的字符编码设置
/**
* 功能:通过构造方法设置编码方式
* @param ReaderEcd
* @param outEcd
*/
public CharsetEcd(String ReaderEcd,String outEcd){
this.ReaderEcd=ReaderEcd;
this.outEcd=outEcd;
}
/**
* 功能:更改单文件字符编码
* @param file 文件
* @throws IOException
*/
public void charsetEnc(File file) throws IOException{
String context="";
//File file = new File(arg0);
InputStreamReader is = new InputStreamReader(new FileInputStream(file),ReaderEcd);
BufferedReader bdf = new BufferedReader(is);
//
String str=null;
while((str=bdf.readLine())!=null){
context+=str+"\n";
}
OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream(file), outEcd);
BufferedWriter bdw = new BufferedWriter(os);
bdw.write(context);
bdw.close();
os.close();
bdf.close();
is.close();
}
/**
* 功能:更改多文件字符编码
* @param nameSuffix 文件后缀名
* @param folder文件夹
* @throws IOException
*/
public void doFilesEcd(File folder,String nameSuffix) throws IOException{
File[] files=folder.listFiles();
for (File f : files) {
if(f.isDirectory()){
doFilesEcd(f,nameSuffix);
}else {
if(f.getName().endsWith(nameSuffix)){
charsetEnc(f);
System.out.println(f.getPath());
}
}
}
}
}
-
【绝对干货】java设置文件编码格式
2021-07-05 01:19:41学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。 面试大厂,最基本的就是夯实的基础,不然面试官随便一问你就凉...工厂方法模式
Spring 框架使用工厂模式来实现 Spring 容器的 BeanFactory 和 ApplicationContext 接口。Spring 容器基于工厂模式为 Spring 应用程序创建 bean,并管理着每一个 bean 的生命周期。BeanFactory 和 ApplicationContext 是工厂接口,并且在 Spring 中存在有很多实现类。getBean() 方法是相对应的 bean 的工厂方法。
抽象工厂模式
在 Spring 框架中,FactoryBean 接口是基于抽象工厂模式设计的。Spring 提供了很多这个接口的实现,比如 ProxyFactoryBean、JndiFactoryBean、LocalSessionFactoryBean、LocalContainerEntityManagerFactoryBean 等。FactoryBean 帮助 Spring 构建它自己无法轻松构建的对象。通常这是用来构造具有许多依赖关系的复杂对象。它也可以根据配置构造高易变的逻辑。例如,在 Spring 框架中,LocalSessionFactoryBean 是 FactoryBean 的一个实现,它用于获取 Hibernate 配置的关联的 bean 的引用。这是一个数据源的特定配置,它在得到 SessionFactory 的对象之前被使用。对此,在一致的情况下可以用 LocalSessionFactoryBean 获取特定的数据源配置。读者可以将 FactoryBean 的 getObject() 方法的返回结果注入到任何其他属性中。
单例模式
Spring 框架提供了一个单例的 bean 来实现单例模式。它类似于单例模式,但它与 Java 中的单例模式不完全相同。
建造者模式
Spring 框架中有一些功能实现了建造者模式。以下是 Spring 框架中基于建造者模式的类:
-
EmbeddedDatabaseBuilder
-
AuthenticationManagerBuilder
-
UriComponentsBuilder
-
BeanDefinitionBuilder
-
MockMvcWebClientBuilder
适配器模式
Spring 框架使用适配器模式来实现很多功能。以下列出的一些在 Spring 框架中使用到适配器模式的类:
-
JpaVendorAdapter
-
HibernateJpaVendorAdapter
-
HandlerInterceptorAdapter
-
MessageListenerAdapter
-
SpringContextResourceAdapter
-
ClassPreProcessorAgentAdapter
-
RequestMappingHandlerAdapter
-
AnnotationMethodHandlerAdapter
-
WebMvcConfigurerAdapter
桥接模式
以下是 Spring 模块中基于桥接模式的实现:
-
ViewRendererServlet: 它是一个 servlet 桥接 ,主要是对 Portlet MVC 的支持
-
桥接模式: Spring 日志处理使用到桥梁模式
装饰器模式
Spring 框架使用装饰器模式构建重要功能,如事务、缓存同步和与安全相关的任务。让我们看看一些 Spring 实现此模式的功能:
-
织入通知到 Spring 应用程序中。它使用装饰者模式的 CGLib 代理,其通过在运行时生成目标类的子类来工作。
-
BeanDefinitionDecorator: 它通过使用自定义属性来增强 bean 的定义。
-
WebSocketHandlerDecorator: 它用来增强一个 WebSocketHandler 附加行为。
外观模式
在企业级应用中,如果使用到 Spring 框架,那么外观模式是常用于应用程序的业务服务层,它用于整合所有服务。读者也可以在 DAO 的持久层上应用这种模式。
代理模式
Spring 框架使用 Spring AOP 模块中的代理模式。在 Spring AOP 中,笔者可以创建对象的代理来实现横切关注点。在 Spring 中,其他模块也实现了代理模式,如 RMI、 Spring 的 HTTP 调用、Hessian 和 Burlap。
责任链模式
Spring Security 项目实现了责任链模式。Spring Security 允许通过使用安全过滤器链在应用程序中实现身份验证和授权功能。这是一个高度可配置的框架。由于使用了责任链设计模式,我们可以在过滤器链上添加自定义过滤器以自定义功能。
命令模式
Spring MVC 实现了命令模式。在企业级应用中使用到 Spring 框架,读者经常会看到通过使用命令对象来实现命令模式。
解释器模式
在 Spring 框架中,解释器模式在 Spring 表达式语言(SpEL)中使用。Spring 从 Spring 3.0 中增加了这个新功能,读者可以在企业级应用程序中通过 Spring 框架使用它。
迭代器模式
Spring 框架还通过 CompositeIterator 类扩展迭代器模式。该模式主要用于 Java 语言的集合框架中,用于按顺序迭代访问元素。
观察者模式
在 Spring 框架中,观察者模式用于实现 ApplicationContext 的事件处理功能。Spring 为我们提供了 ApplicationEvent 类和 ApplicationListener 接口来启用事件处理。Spring 应用程序中的任何 bean 实现 ApplicationListener 接口,都会接收到 ApplicationEvent 作为事件发布者推送的消息。在这里,事件发布者是主题(Subject) 和实现 ApplicationListener 的 bean 的观察者(Observer)。
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最基本的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
习。
大厂Java架构核心笔记(适合中高级程序员阅读):
-
-
java获取文件编码
2022-02-12 10:24:54java编码 移位运算 获取文件编码 -
在window10中,如何修改Java文件原有的编码格式
2022-03-10 15:05:23先将java文件使用记事本打开 然后再点击记事本中内容中左上方【文件】->【另存为】->【编码】修改为自己想要的文件编码 -
文件(java,txt等)批量转换格式(UTF-8之类)
2020-08-19 11:08:18可以转换文件的编码格式,网上有些项目和本地的eclipse的编码格式不同就会发生乱码,很烦。然后就各方参考,整理出了这一份代码,直接用,直接转码,直接可以将项目中的java文件一键转码,很方便。里面有个test看了... -
java批量修改指定文件夹下多级文件编码格式
2018-11-21 17:08:20经常碰到文件编码格式不一致导致一堆问题,想在linux上批量修改文件夹下的文件编码,操作太麻烦,花了一点时间写了个java程序来操作,用着非常方便,详情如下: 在FileEncodeTranslate类中,修改一下源文件夹路径,... -
Java中常见编码格式及乱码解决方法
2021-02-27 07:54:27一:设置编码格式1、JSP文件charset=UTF-8 的作用是指定JSP向客户端输出的编码方式为"UTF-8",pageEncoding="UTF-8" 为了让JSP引擎能正确地解码含有中文字符的JSP页面,这在LINUX中很有效,request.setCharacter... -
文件内容替换与文件编码格式转换java源码
2015-03-19 18:40:10eclipse默认编码为gbk开发一段时间需要修改成utf-8,写个脚本批量处理文件编码格式,也可以批量替换文本内容; -
Eclipse中java文件编码格式修改
2017-10-17 14:08:52在eclipse中可以影响文件编码格式的设定有好几处。先要知道当前情况下哪个设定起作用,再针对性的进行修改。 -
判断上传的文件编码方式-支持各种编码方式
2018-10-16 14:50:31判断上传的文件编码方式-支持各种编码方式,GB2312、utf-8、gbk、utf-16... -
java检查文件的编码格式
2019-09-20 16:59:10近来碰到需要判断文件的编码格式,根据编码格式读取文件,网上百度了好几种方法,遂分享一下。 1.通过文件的前三个字节判断(可用,但据百度说正确率不高): public static String codeString(String fileName) ... -
java文件读写操作指定编码格式[转]
2021-02-28 15:07:33读文件:BufferedReader从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。通常,Reader 所作的每个读取... -
读取创建CSV文件并自动解析文件编码方式
2018-05-08 16:22:08读取与创建CSV文件,根据第三方jar包自动解析文件编码方式,相关jar包与使用说明 -
java写xml文件时,如何指定编码格式?(祥见内容)
2021-03-08 05:08:28我用下面这段代码写入xml文件TransformerFactorytFactory=TransformerFactory.newInstance();Transformertransformer=tFactory.newTransformer();DOMSourcesource=newDOMSource(doc);StreamResultresult=newStreamR.... -
Java实现视频编码格式转换(转libx264编码格式)
2022-04-21 10:49:33导入依赖 <dependency> <groupId>ws.schild</groupId> <artifactId>jave-core</artifactId> <version>2.4.5</version> </dependency> <... -
Java实现转换文件编码
2020-12-23 16:17:14转换文件编码 将GBK编码的文本文件,转换为UTF-8编码的文本文件。 分析: 1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称GBK 2.创建OutputStreamWriter对象,构造方法中传递字节输出流和... -
Java 转换流可以按指定编码格式读写文件
2022-04-18 09:46:52Java 按指定编码格式读写文件 转换流 -
Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!
2021-02-25 19:45:28我们经常会遇到读取文件内容的情况,就需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况。根据文件扩展名判定不太准确,可能会遇到未知扩展名或被修改了扩展名,下面的测试类使用文件头... -
idea修改java文件使用的编码集
2021-12-14 18:44:23idea设置项目编码集 -
javascript批量修改文件编码格式的方法
2020-12-12 00:24:32本文实例讲述了javascript批量修改文件编码格式的方法。分享给大家供大家参考。具体如下: 摘要: 最近在制作手册的时候遇到了一个问题’文档乱码’,查看文件之后发现文件编码不对,总共100多个文件,如果用编辑器... -
项目编码格式修改,将项目中的GBK文件改为UTF-8文件
2021-03-21 10:53:26import java.io.File;import java.io.IOException;import java.util.Collection;import org.apache.commons.io....public class Test {public static void main(String[] args) throws IOException {//GBK编码格... -
java转换字符串编码格式的方法
2021-03-04 04:12:57java转换字符串编码格式 (解码错误,重新解码)字符集概念:规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系。我们在计算机屏幕上看到的是实体化的文字,而在计算机存储... -
统一修改 java 文件编码格式
2016-12-07 11:27:01Eclipse 修改文件编码 -
Java设置生成文件编码格式带BOM【csv】【hutool】【java】
2021-07-19 13:55:56之前做的一个数据导出功能,生成的csv文件,编码格式UTF-8,后来客户反应说文件打开中文乱码,一问用的是office excel,实验后最终发现UTF-8-BOM格式就没问题。这里记录下过程,代码中使用了Hutool工具类。 源码 @... -
如何查看Java源文件的编码方式及去掉BOM
2021-03-12 22:50:12一、查看Java源文件的编码方式用EditPlus打开Java源文件,点击菜单栏“File”――>...二、修改Java源文件的编码方式较常见的情况是运行源文件时报错“需要为class interface enum”,这种情况往往和源文件采用了...