博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(二) 文本输入与输出
阅读量:4047 次
发布时间:2019-05-25

本文共 3677 字,大约阅读时间需要 12 分钟。

指定编码格式输入输出文本

InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");    int b;    StringBuilder sb = new StringBuilder();    while((b=isr.read()) != -1){        sb.append((char)b);    }    String str = sb.toString();    isr.close();        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));      String line = null;      while((line=in.readLine()) != null){          System.out.println(line);      }          OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file, true), "utf-8");    osw.write("在文本后追加文字");    osw.close();// 常用输出方式PrintWriter out = null;try {    out = new PrintWriter(new OutputStreamWriter(new FileOutputStream("C:\\Users\\sgq0085\\Desktop\\tmp.txt", false), "GBK"));    out.println("汉字测试");    out.println("中文测试");    out.println("English");} catch (Exception e) {    logger.error("Error {} ", e);} finally {    IOUtils.closeQuietly(out);}

 

通过读入器或写出器 FileReader和FileWriter来读写,但要注意编码格式,InputStreamReader中的方法getEncoding()是指创建时默认或指定的字符编码。
e.g.新建写出器FileWriter

FileWriter out = new FileWriter("output.txt");    //等同于    FileWriter out = new FileWriter(new FileOutputStream("output.txt"));

 

1.写出文本输出

对于文本的输出可能希望使用PrintWriter,PrintWriter该类拥有以文本格式打印字符串和数字的方法,也可以将PrintWriter链接到FileWriter的方法

//该构造使用默认的字符编码    PrintWriter out = new PrintWriter("output.txt");    //等同于    PrintWriter out = new PrintWriter(new FileWriter("output.txt"));

 

使用与System.out相同的方法print,println和printf来打印数字、字符、boolean值、字符串和对象。

e.g.通过PrintWriter进行打印

String name = "the name string";double number = 123;out.print(name)

 

(1)println方法在行末添加对目标系统来说恰当的换行符(windows "\r\n" ,Unix "\n")

(2)设置写出器为自动清空模式,那么只要println被调用,缓冲区中所有的字符都会被发送到它们的目的地。默认情况下,自动清空机制是不使用的。通过设置PrintWriter(Writer out, Boolean autoFlush)
e.g.PrintWriter out = new PrintWriter(new FileWriter("file.txt"), true);    \\auto flush
(3)print方法不抛出异常,可以通过调用checkError方法来查看流是否出现了某些错误。
   
2.读入文本输入
以二进制格式写出数据,使用DataOutputStream;以文本格式写出数据,使用PrintWriter
e.g.通过BufferedReader类的nextLine方法读入一行文本

BufferedReader in = new BufferedReader(new FileReader(file));        String line;        while((line=in.readLine()) != null){            ... ...        }

 

BufferedReader没有任何用于读入数字的方法,可以使用Scanner来读入文本。

3.文本格式储存对象
可以将对象以文本的形式存储(csv ,号)

File file = new File(System.getProperty("user.dir") + "\\conf\\stream\\saveByCsv.csv");        PrintWriter out = new PrintWriter(file);        out.println("1|a|一");        out.println("2|b|二");        out.println("3|c|三");        out.println("4|d|四");        out.close();               Scanner in = new Scanner(new FileReader(file));        while(in.hasNextLine()){            // | 在正则里有特殊用法需要转义            String[] line = in.nextLine().split("\\|");            ... ...        }        in.close();

 

4.字符集

Java SE 1.4中引入java.nio包用引入的Charset类统一对字符集的转换
字符集建立了两字节Unicode码元序列与使用本地字符编码方式的字符序列之间的映射。ISO-8859-1是最流行的字符编码之一,是一种对Unicode前256个字符进行单字节编码的方式。
Charset类使用的是IANA字符集注册中心标准化字符集名称。
(1)通过调用静态的forName方法来获得一个Charset,需要传递一个官方名称或别名,字符集名称大小写不敏感,每个字符集可以拥有许多别名。

Charset cset = Charset.forName("ISO-8859-1");

 

(2)aliases方法返回别名构成的Set对象

Set
aliases = cset.aliases(); for(String alias : aliases){ System.out.println(alias); }

 

(3)availableCharsets方法获取所有可用字符集

Map
charsetMap = Charset.availableCharsets(); for(String name : charsetMap.keySet()){ System.out.println(name); }

 

(4)本地编码方式模式不能表示所有Unicode字符,如果某个字符不能表示,将转换成�
(5)编码encode

String str = "汉字~~";        ByteBuffer bbuf = cset.encode(str);        byte[] bytes = bbuf.array();

 

(6)解码decode

ByteBuffer bbuf = ByteBuffer.wrap(bytes, 0, bytes.length);        CharBuffer cbuf = cset.decode(bbuf)        String str = cbuf.toString();

 

 

转载地址:http://rxyci.baihongyu.com/

你可能感兴趣的文章
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
自定义 select 下拉框 多选插件
查看>>
js获取url链接携带的参数值
查看>>
gdb 调试core dump
查看>>
gdb debug tips
查看>>
arm linux 生成火焰图
查看>>
linux和windows内存布局验证
查看>>
linux insmod error -1 required key invalid
查看>>
linux kconfig配置
查看>>
linux不同模块completion通信
查看>>
linux printf获得时间戳
查看>>
C语言位扩展
查看>>
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>