随手写的Java向文本文件写字符串的类
今天看了一篇讲Java IO流的文章,好长时间没用IO流了,回顾了一下Java编写IO程序的思路,之前文章中有介绍。对于写二进制文件我们习惯用 面向字节类的流。对于写字符我们使用面向字符类的流。但是我们明白在计算机底层,数据是以字节进行存储的。面向字符流只是为了方便我们程序员对文本文件的处理,因为在我们平常写程序中处理最多的数据类型也就是文本。这些面向字符流,是对面向字节的封装,把细节封装起来。
我们向Text文件中写入一段 字符串 比如 "中国人",首先 要对其进行编码,计算机只懂 ASCII,ASCII中又没有包含 '中' '国' '人'这三个字符,所以要选择合适的编码方案如(GBK/UTF-8)将"中国人"转换为 ASCII字节数组。当我们打开Text文件的时候notepad这个程序按照 指定的编码方案 将 ACII字节数组 进行组合,显示正确的字符串。所以当我们打开文本文件的时候,就会显示"中国人"。
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset; public class MyStringWriter {
private OutputStream out;
private Charset encoding;
private String lineSeparator; public MyStringWriter(String file) throws FileNotFoundException {
this(file, System.getProperty("file.encoding"));// 获取操作系统默认编码
} public MyStringWriter(String file, String encoding)
throws FileNotFoundException {
this(new FileOutputStream(file), encoding);
} public MyStringWriter(OutputStream out, String encoding) {
this.out = out;
this.encoding = Charset.forName(encoding);
this.lineSeparator = System.getProperty("line.separator");// 获取操作系统的行分割符
} public void write(String str) throws IOException {
out.write(encoding.encode(str).array());//向文件中写入编码后的字节数组
} public void writeLine(String line) throws IOException {
write(line);
for (int i = 0; i < lineSeparator.toCharArray().length; i++) {
out.write(lineSeparator.toCharArray()[i]);
}
} public void close() throws IOException {
out.close();
} public static void main(String[] args) throws IOException {
MyStringWriter writer = new MyStringWriter("F:\\demo.txt");
writer.write("大家好!");
writer.writeLine("我是中国人");
writer.writeLine("我喜欢编程");
writer.close();
}
}
随手写的Java向文本文件写字符串的类的更多相关文章
- [Java初探04]__字符串(String类)相关
前言 接下来将暂时将重心偏移向实际操作,不在将大量时间花费在详细的知识点整理上,将会简略知识总结笔记的记录,加强实际练习的时间,实例练习篇也不再同步进行,我会将部分我觉得重要的源码更新在每节知识点后面 ...
- 零基础学Java第四节(字符串相关类)
本篇文章是<零基础学Java>专栏的第四篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! String 本文章首发于公众号[编程攻略] 在Java中,我们经 ...
- Java 输出对象为字符串 工具类
public static String reflectionToString(Object o){ if(o == null) return StringUtils.EMPTY; StringBui ...
- 自己写一个java.lang.reflect.Proxy代理的实现
前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Pr ...
- 自己写一个java的mvc框架吧(一)
自己写一个mvc框架吧(一) 目录 自己写一个mvc框架吧(一) 自己写一个mvc框架吧(二) 自己写一个mvc框架吧(三) 自己写一个mvc框架吧(四) 写之前的一些废话 废话 1 (总是要先随便说 ...
- 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度
import java.util.Scanner; /** * [程序38] * * 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度. * * @author Jame ...
- java - day015 - 手写双向链表, 异常(续), IO(输入输出)
类的内存分配 加载到方法区 对象在堆内存 局部变量在栈内存 判断真实类型,在方法区加载的类 对象.getClass(); 类名.class; 手写双向链表 package day1501_手写双向链表 ...
- java 从零开始手写 RPC (04) -序列化
序列化 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实 ...
- 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
[提交][状态][讨论版] 题目描述 有一字符串,包含n个字符.写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串. 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入 ...
随机推荐
- 个人整理--Java编码规范
编码规范对于开发人员来说是非常重要的,有以下几个原因: 1.一个软件的生命周期中,80%的花费在于维护 2.几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 3.编码规范可以改善软件 ...
- 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)
群里看到这道题,用python做了做, def find(array): v_sum = greatest = 0 for a in array: v_sum += a v_sum = 0 if v_ ...
- Android 解屏幕锁与点亮屏幕(来电时效果)
PowerManager pm=(PowerManager) getSystemService(Context.POWER_SERVICE); //获取电源管理器对象 PowerManager.Wak ...
- php 二维数组以树形输出(转)
<?php /** * @author Skyline * @copyright 2011 */ $cate = array(1=>array('id'=>1,'pid'=>0 ...
- configure JAAS for jboss 7.1 and mysql--reference
Hello all, In this tutorial we are going to configure JAAS for jboss 7.1 and mysql for Form based au ...
- 安全框架Shiro和Spring Security比较
Shiro 首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势. Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证. ...
- iOS 启动连续闪退保护方案
引言 “如果某个实体表现出以下任何一种特性,它就具备自主性:自我修复.自我保护.自我维护.对目标的自我控制.自我改进.” —— 凯文·凯利 iOS App 有时可能遇到启动必 crash 的绝境:每次 ...
- Android开发艺术探索》读书笔记 (12) 第12章 Bitmap的加载和Cache
第12章 Bitmap的加载和Cache 12.1 Bitmap的高速加载 (1)Bitmap是如何加载的?BitmapFactory类提供了四类方法:decodeFile.decodeResourc ...
- 没有懂的leetcode
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...
- C#之—委托
(1)定义委托:(百度百科样例,只有写了才有收获) namespace Entrust { public delegate void GreetingDelegate(string name); // ...