关于writer()写入文件,原来的代码写的是

FileWriter fileWriter = new FileWriter(file);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write("写入文件内容");

虽然中文也没有乱码,但是当文件有具体编码格式要求的时候,发现BufferedWriter和FileWriter并没有设置编码格式的参数。

查了一下发现可以用以下方式代替:

OutputStreamWriter out = new OutputStreamWriter(
	new FileOutputStream(file),"UTF-8");
out.write("写入文件内容");
                                    1.使用如下代码:
//缓冲字符输入流
BufferedReader br = new BufferedReader( new FileReader("outputFile\\fileSortIn.txt"));
//缓冲字符输出流
BufferedWriter bw = new BufferedWriter( new FileWriter("outputFile\\fileSortOut.txt...
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import com.vince.*;
 * 将本地文件以哪种编码输出
 * @param inputfile 输入文件的路径
 * @param outfile 输出文件的路径
 * @param code 输出文件的编码
 * @throws IOException
public class Charchange{
 public static void main(String[] args) throws IOException {
  String inputfile,outputfile,code;
  inputfile = "D:\\迅雷\\work\\fen\\2-temp-test.txt";//要转码的文件
  outputfile = "D:\\迅雷\\work\\1.txt";//输出的文件
  code = "utf-8";
  System.out.println("转码开始");
  convert(inputfile,outputfile,code);
  System.out.println("转码完成");
public static  void convert(String inputfile,String outfile,String code) throws IOException {
    StringBuffer sb = new StringBuffer();
    StringBuffer sb2 = new StringBuffer();
    //得到当前文件的编码
    String ch=getCharset(inputfile);
    InputStreamReader isr=null;
    OutputStreamWriter osw =null;
    //根据当前文件编码进行解码
    if(ch.equals("UTF8")){
        isr= new InputStreamReader(new FileInputStream(inputfile), "UTF-8");    
    }else if(ch.equals("Unicode")){
       isr= new InputStreamReader(new FileInputStream(inputfile), "Unicode");    
   }else {
        isr= new InputStreamReader(new FileInputStream(inputfile), "GB2312");    
    //将字符串存入StringBuffer中
    BufferedReader br = new BufferedReader(isr);        
    String line = null;
    while ((line = br.readLine()) != null) {
        sb.append(line + "\n");
    br.close();
    isr.close();
    //以哪种方式写入文件
    if("UTF-8".equals(code)){
        osw = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8");
    }else if("GB2312".equals(code)){
        osw = new OutputStreamWriter(new FileOutputStream(outfile), "GB2312");
    }else if("Unicode".equals(code)){
        osw = new OutputStreamWriter(new FileOutputStream(outfile), "Unicode");
    }else{
        osw = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8");
    BufferedWriter bw = new BufferedWriter(osw);
    String sb1 = sb.toString();
    String a1 = deal(sb1);
    bw.write(a1);
    bw.close();
    osw.close();
 * 根据文件路径判断编码
 * @param str
 * @return
 * @throws IOException
private static String getCharset(String str) throws IOException{ 
    BytesEncodingDetect s = new BytesEncodingDetect();   
    String code = BytesEncodingDetect.javaname[s.detectEncoding(new File(str))];  
    return code;  
//本方法完成单个无字符的转换
public static String Change(String temp){
 String myString = temp.replace("&#", "");
 String[] split = myString.split(";");
 StringBuilder sb = new StringBuilder();
for (int i = 0; i < split.length; i++) 
    sb.append((char)Integer.parseInt(split[i]));
return sb.toString();
//接收String sb1并对字符串的联合处理
public static String deal(String sb1) {
  //模块化开始
 String car="";//小车运输单个字符
    while(sb1.length()!=0){
    int markStar = sb1.indexOf("&");
    //判断方法是以&开头的数据默认为要处理的无字符
    if(markStar==0){
        String temp = sb1.substring(markStar,8);
        car = car+Change(temp);
         sb1=sb1.substring(8);
    }else if(markStar==-1&sb1;.length()>0){
      String temp = sb1.substring(0,sb1.length());
      car = car+temp;
      sb1=sb1.substring(sb1.length());    
    }else{
       String temp = sb1.substring(0,markStar);
       car = car+temp;
     sb1=sb1.substring(markStar);
    return car.toString() ;
                                    将文本写入字符输出流,缓冲字符,以便高效地写入单个字符、数组和字符串。可以指定缓冲区大小,也可以接受默认大小。对于大多数用途,默认值足够大。提供了一个 newLine() 方法,它使用由系统属性 line.separator 定义的平台自己的行分隔符概念。并非所有平台都使用换行符 ('\n') 来终止行。因此,调用此方法终止每个输出行优于直接写入换行符。通常,Writer 会立即将其输出发送到底层字符或字节流。
编辑word模板时,${string} 标签最好是手动一次性输入完毕,或者使用记事本统一将整个${string}编辑好之后,粘贴至word里边。
也就是说,不要在word里首先打完 ${ } 之后,又从其它地方把 string 字符串粘贴至 { } 之间,这样在 word 转化为 xml时,解析会有问题,freemarker解析时,会报错。
	 * @Desc:生成word文件
	 * @Author:张轮
	 * @Date:2014-1-22下午05:33:42
	 * @param dataMap word中需要展示的动态数据,用map集合来保存
	 * @param templateName word模板名称,例如:test.ftl
	 * @param filePath 文件生成的目标路径,例如:D:/wordFile/
	 * @param fileName 生成的文件名称,例如:test.doc
    @SuppressWarnings("unchecked")
	public static void createWord(Map dataMap,String templateName,String filePath,String fileName){
        try {
        	//创建配置实例 
        	Configuration configuration = new Configuration();
        	//设置编码
            configuration.setDefaultEncoding("UTF-8");
            //ftl模板文件统一放至 com.lun.template 包下面
            configuration.setClassForTemplateLoading(WordUtil.class,"/com/lun/template/");
            //获取模板 
            Template template = configuration.getTemplate(templateName);
            //输出文件
            File outFile = new File(filePath+File.separator+fileName);
            //如果输出目标文件夹不存在,则创建
            if (!outFile.getParentFile().exists()){
                outFile.getParentFile().mkdirs();
            //将模板和数据模型合并生成文件 
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
            //生成文件
            template.process(dataMap, out);
            //关闭流
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
                                    Closeable Closeable 是可以关闭的数据源或目标。 
DataInput DataInput 接口用于从二进制流中读取字节,并根据所有 Java 基本类型数据进行重构。 
DataOutput DataOutput 接口用于将数据从任意 Java 基本类型转换为一系列字节,并将这些字节写入二进制流。 
Externalizable Externalizable 实例类的唯一特性是可以被写入序列化流中,该类负责保存和恢复实例内容。 
FileFilter 用于抽象路径名的过滤器。 
FilenameFilter 实现此接口的类实例可用于过滤器文件名。 
Flushable Flushable 是可刷新数据的目标地。 
ObjectInput ObjectInput 扩展 DataInput 接口以包含对象的读操作。 
ObjectInputValidation 允许验证图形中对象的回调接口。 
ObjectOutput ObjectOutput 扩展 DataOutput 接口以包含对象的写入操作。 
ObjectStreamConstants 写入 Object Serialization Stream 的常量。 
Serializable 类通过实现 java.io.Serializable 接口以启用其序列化功能。 
BufferedInputStream BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。 
BufferedOutputStream 该类实现缓冲的输出流。 
BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 
BufferedWriter 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 
ByteArrayInputStream ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。 
ByteArrayOutputStream 此类实现了一个输出流,其中的数据被写入一个 byte 数组。 
CharArrayReader 此类实现一个可用作字符输入流的字符缓冲区。 
CharArrayWriter 此类实现一个可用作 Writer 的字符缓冲区。 
Console 此类包含多个方法,可访问与当前 Java 虚拟机关联的基于字符的控制台设备(如果有)。 
DataInputStream 数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。 
DataOutputStream 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。 
File 文件和目录路径名的抽象表示形式。 
FileDescriptor 文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。 
FileInputStream FileInputStream 从文件系统中的某个文件中获得输入字节。 
FileOutputStream 文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。 
FilePermission 此类表示对文件和目录的访问。 
FileReader 用来读取字符文件的便捷类。 
FileWriter 用来写入字符文件的便捷类。 
FilterInputStream FilterInputStream 包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。 
FilterOutputStream 此类是过滤输出流的所有类的超类。 
FilterReader 用于读取已过滤的字符流的抽象类。 
FilterWriter 用于写入已过滤的字符流的抽象类。 
InputStream 此抽象类是表示字节输入流的所有类的超类。 
InputStreamReader InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。 
LineNumberInputStream 已过时。 此类错误假定字节能充分表示字符。 
LineNumberReader 跟踪行号的缓冲字符输入流。 
ObjectInputStream ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。 
ObjectInputStream.GetField 提供对从输入流读取的持久字段的访问权限。 
ObjectOutputStream ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。 
ObjectOutputStream.PutField 提供对要写入 ObjectOutput 的持久字段的编程访问。 
ObjectStreamClass 类的序列化描述符。 
ObjectStreamField Serializable 类中 Serializable 字段的描述。 
OutputStream 此抽象类是表示输出字节流的所有类的超类。 
OutputStreamWriter OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。 
PipedInputStream 管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。 
PipedOutputStream 可以将管道输出流连接到管道输入流来创建通信管道。 
PipedReader 传送的字符输入流。 
PipedWriter 传送的字符输出流。 
PrintStream PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。 
PrintWriter 向文本输出流打印对象的格式化表示形式。 
PushbackInputStream PushbackInputStream 为另一个输入流添加性能,即“推回 (push back)”或“取消读取 (unread)”一个字节的能力。 
PushbackReader 允许将字符推回到流的字符流 reader。 
RandomAccessFile 此类的实例支持对随机访问文件的读取和写入。 
Reader 用于读取字符流的抽象类。
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.cookie.CookieSpec;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.app.comom.FileUtil;
public class HttpClientHtml {
	private static final String SITE = "login.goodjobs.cn";
	private static final int PORT = 80;
	private static final String loginAction = "/index.php/action/UserLogin";
	private static final String forwardURL = "http://user.goodjobs.cn/dispatcher.php/module/Personal/?skip_fill=1";
	private static final String toUrl = "d:\\test\\";
	private static final String css = "http://user.goodjobs.cn/personal.css";
	private static final String Img = "http://user.goodjobs.cn/images";
	private static final String _JS = "http://user.goodjobs.cn/scripts/fValidate/fValidate.one.js";
     * 模拟等录 
     * @param LOGON_SITE
     * @param LOGON_PORT
     * @param login_Action
     * @param params
     * @throws Exception
    private static HttpClient loginHtml(String LOGON_SITE, int LOGON_PORT,String login_Action,String ...params) throws Exception {
        HttpClient client = new HttpClient();
        client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);
        // 模拟登录页面
        PostMethod post = new PostMethod(login_Action);
        NameValuePair userName = new NameValuePair
                                    FileWriter 默认使用ISO-8859-1或US-ASCLL西方编码,而FileWriter类没有setEncoding方法。
//FileWriter fw = new FileWriter(csvFile,true);
BufferedWriter writer = new BufferedWriter (new OutputStreamWriter (
											new FileOutputStream (csvFile,true),"gbk"));
......
                                    在用BufferedReader和BufferedWriter读写文件的过程中,发现写的文件中如果含有中文字符会有乱码的情况。假设想把http://www.baidu.com百度首页的内容替换为自己想自定义的内容,代码如下:/*** 通过网页URL获取源码* @param getUrl*/public static void catchHtmlCode(String getUrl){String ...
                                    Java文档流-字符FileReader输入流、BufferedReader(缓存字符流)、-字符FileWriter输入流、BufferedWriter(缓存字符流)实例解析
                                    public static void writeFile(String fileName, String contents, boolean append) throws IOException {
        try {
            File file = new File(fileName);
            BufferedWriter writer = new B...
public class BufferedReader_ {
    public static void main(String[] args) throws Exception {
        String filePath = "d:\\hello.txt";
                                    File file = new File("");
  FileInputStream fis = new FileInputStream(file);
  InputStreamReader isr = new InputStreamReader(fis,"GBK");
  BufferedReader br = new BufferedReader(isr);
BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对基础字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 File...
                                    字节流,用中文可能会出现乱码计算机中存储的信息都是二进制表示的按照某种规则将字符编程二进制 再存储到计算机中,成为编码按照同样规则,在计算机中二进制数解析出来,成为解码编码和解码的方式必须一致,否则会导致乱码。