• javaIO——输入输出流


    字节流与字符流

    File类不支持对文件内容进行相关的操作,所有若要处理文件的内容,则需要通过流操作模式来完成。

                          

    流的基本操作步骤:

    Step1:根据文件路径创建File类对象.

    Step2:根据字节流或字符流的子类实例化父类对象.

    Step3:进行数据的读取或写入操作.

    Step4:关闭流(Close()).

    (1)字节流

           

    A. 字节输出流(OutputStream)

    1Outputstream的类结构

    public abstract class OutputStream implements Closeable, Flushable

    观察OutputStream的结构,可以发现其为一个抽象类(要想对父类实例化必须使用子类)并且实现了CloseableFlushable两个接口:

    public interface Closeable extends AutoCloseable

    public interface Flushable

    若要通过程序对内容进行输出,则需要引入java.io.OutputStream.

    (1)Outputstream类提供的方法

    因为OutputStream为抽象类,所以要用子类对其进行实例化操作。我们若要对文件进行操作,则需用到FileOutputStream类对其进行实例化。

    将给定字符数组的内容全部输出:

    public void write(byte b[]) throws IOException

    将部分字节数组的内容输出:

    public void write(byte b[], int off, int len) throws IOException

    输出单个字节:

    public abstract void write(int b) throws IOException


    1. public class Test2 {
    2. public static void main(String[] args) throws IOException {
    3. String singal = File.separator;
    4. //1.根据文件路径创建File对象
    5. File file = new File("G:"+singal+"lemon"+singal+"testIO"+singal+"TestIO.java");
    6. //保证父目录存在
    7. if(!file.getParentFile().exists()) {
    8. //若目录不存在则创建多级目录
    9. file.getParentFile().mkdirs();
    10. }
    11. //根据字节流的子类实例化父类对象
    12. //此时只能操作File类
    13. OutputStream outputStream = new FileOutputStream(file);
    14. //使得内容实现追加操作,而非覆盖
    15. //OutputStream outputStream = new FileOutputStream(file,true);
    16. //将指定语句输出到文件的内容中
    17. String string = "今天真热啊!";
    18. //将内容变为字节数组
    19. outputStream.write(string.getBytes());
    20. //将内容变为字节数组,并且设置要输出的范围
    21. //outputStream.write(string.getBytes(),0,5);
    22. outputStream.close();
    23. }
    24. }

          

    在进行文件输出的时候,所有的文件会自动帮助用户创建,不在需要调用createFile()方法手工创建。

    当我们运行多次时发现文件中的内容仍然只有一句,这是因为FileOutputStream(File file)该构造函数只能实现内容的覆盖并不能实现内容的追加处理,若想使得内容得到追加,则需使用提供的另外一个构造函数 FileOutputStream(File file,boolean append)来实现。

    实现追加输出运行结果如下:

         

    将给定部分内容输出结果如下:

           

    (2)字符流

    字符流适用于处理中文数据

      

    A. 字符输出流(Writer

    public abstract class Writer implements Appendable, Closeable, FlushableOutputStream多实现了一个Appendable接口。

    Writer类里面也提供write()方法,而且该方法接收的类型都是char型,要注意的是,Writer类提供了一个直接输出字符串的方法

    public void write(String str) throws IOException

       Writer类的结构与方法的使用与OutputStream非常相似,只是Writer类对于中文的支持很好并且提供了直接写入 String的方法而已。

    1. /*
    2. * 字符输出流
    3. * */
    4. public class Test2{
    5. public static void main(String[] args) throws IOException {
    6. String singal = File.separator;
    7. //1.根据文件路径创建File对象
    8. File file = new File("G:"+singal+"lemon"+singal+"testIO"+singal+"TestIO.java");
    9. //利用子类实例化父类对象
    10. Writer writer = new FileWriter(file);
    11. writer.write("你好");
    12. writer.close();
    13. }
    14. }

       

    B. 字符输入流(Reader

    public abstract class Reader implements Readable, Closeable

    Reader仍然为抽象类,若要对文件进行读取操作,则要使用FileReader对其进行实例化操作。

    由上面的Writer类中可知其提供的方法可以直接向目标源写入字符串,但是Reader类提供的方法中只能通过字符数组进行读取操作,而没有直接的方法使其可以直接读取字符串类型。

    1. /*
    2. * 字符输入流
    3. * */
    4. public class Test2{
    5. public static void main(String[] args) throws IOException {
    6. String singal = File.separator;
    7. //1.根据文件路径创建File对象
    8. File file = new File("G:"+singal+"lemon"+singal+"testIO"+singal+"TestIO.java");
    9. //利用子类实例化父类对象
    10. Reader reader = new FileReader(file);
    11. char[] cs = new char[1024];
    12. int len = reader.read(cs);
    13. String result = new String(cs,0,len);
    14. System.out.println(result);
    15. //关闭流
    16. reader.close();
    17. }
    18. }

                     

    (3)字符流与字节流的区别

    A. 字节流是原生操作,而字符流是经过加工处理后的操作。

    B. 字符流适合处理中文,字节流适合处理一切数据类型(对中文支持不好)。

    C. 所有字符流的操作,无论是写入还是输出,数据都先保存在缓存中。

    D. 如果字符流不关闭,数据就有可能保存在缓存中并没有输出到目标源。这种情况下就必须强制刷新才能够得到完整数据。

    1. public class Test2{
    2. public static void main(String[] args) throws IOException {
    3. String singal = File.separator;
    4. //1.根据文件路径创建File对象
    5. File file = new File("C:"+singal+"Users"+singal+"lenovo"+singal+"DeskTop"+singal+"Test.txt");
    6. if(!file.getParentFile().exists()) {
    7. file.getParentFile().mkdirs();
    8. }
    9. Writer writer = new FileWriter(file);
    10. writer.write("hello world !");
    11. //进行刷新,若不进行刷新,则内容无法写入
    12. //强制清空所有缓冲区内容,所有内容都输出
    13. //writer.flush();
    14. }
    15. }
                        




  • 相关阅读:
    日期获取以及时间转化
    ddt 接口框架数据处理调用excel 处理
    ddt 测试用例UI运用
    动态验证码处理UI自动化获取处理
    Bug Report For .Net (zz.IS2120@BG57IV3)
    中关村翠湖科技园:高端产业聚集区 (zz.IS2120@BG57IV3.T752270541 .K)
    vc6,windows 7 x64 调试 (IS2120@BG57IV3)
    Excel c#Excel文件的操作[转载]
    NUnit学习 标签、方法 记录与说明
    Excel c#Excel工作进程的创建写 与Excel文件的保存[原创] (20100205 11:09)
  • 原文地址:https://www.cnblogs.com/edda/p/12598504.html
Copyright © 2020-2023  润新知