Java新手学习之IO流的简单使用

目录
  • 前言
  • IO流
    • 1、基本概念
    • 2、IO流分类
    • 3、File
      • 3.1File基本概念
      • 3.2创建文本
      • 3.3创建目录
      • 3.4判断、读取和删除
    • 4、字节流
      • 4.1字节流的抽象基类
      • 4.2字节流写数据
      • 4.3字节流读数据
    • 5、字符流
      • 5.1由来
      • 5.2字符流写数据
      • 5.3字符流读数据
    • 6、IO流小结
    • 7、特殊操作流
      • 7.1标准输入输出流
      • 7.2字节打印流
      • 7.3对象序列化流和对象反序列化流
      • 7.4Properties集合
    • 8、总结

前言

在我们平时使用图形化界面的时候,会发现来建立一个文件夹或者一个文档的时候很简单,只需要在桌面单击鼠标右键就可以了。但是,在我们写项目的时候想要把一些东西存到文件夹里面怎么办呐?

不可能程序运行到需要文件夹的时候我再来到桌面或者哪里来手动建立一个文件或者文档吧?不要怀疑自己这样操作是肯定不行的,那有的人就会想了那我们怎么办呐?这不博主就来帮大家的忙了嘛,在java中有个东西叫做IO流就可以很好的解决这个问题。什么是IO流呐?接下来就由我来带领大家了解什么是IO流!

IO流

1、基本概念

IO:Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。

Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。

Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。

一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。

2、IO流分类

图示:

3、File

在学习IO流之前我们要先明白如何利用程序创建一个文件夹或者一个文本文档,这样我们才能在往文件里面写东西的时候知道怎么写应该写到什么地方去。

3.1File基本概念

File是文件和目录路径名的抽象表示,文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的

3.2创建文本

File中创建文本的方方法常用的就一个:

代码创建一个Test.txt的文本:

import java.io.File;

public class CreateDir {
    public static void main(String[] args) {
        File f1 = new File("E:\\Test.txt");
        // 现在创建目录
        f1.createNewFile();
    }
}

3.3创建目录

File中有两个方法来创建文件夹:

mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。
mkdirs()方法创建一个文件夹和它的所有父文件夹。

代码创建一个 "/tmp/user/java/bin"文件夹:

import java.io.File;

public class CreateDir {
    public static void main(String[] args) {
        String dirname = "/tmp/user/java/bin";
        File d = new File(dirname);
        // 现在创建目录
        d.mkdirs();
    }
}

3.4判断、读取和删除

File类中的一些常用方法给大家写在下面了

判断:

public boolean isDirectory() 测试此抽象路径名表示的File是否为目录
public boolean isFile() 测试此抽象路径名表示的File是否为文件
public boolean exists() 测试此抽象路径名表示的File是否存在

读取:

public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
public String getPath() 将此抽象路径名转换为路径名字符串
public String getName() 返回由此抽象路径名表示的文件或目录的名称
public String[] list() 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
public File[] listFiles() 返回此抽象路径名表示的目录中的文件和目录的File对象数组

删除:

public boolean delete() 删除由此抽象路径名表示的文件或目录

判断、读取和删除的使用方法和前面的创建都差不太多就不一一进行代码展示了。一般只需要知道有这些方法就行,实在记不住可以在API上进行查找。

4、字节流

4.1字节流的抽象基类

这是字节流所有类的超类:

InputStream:这个抽象类是表示字节输入流的所有类的超类

OutputStream:这个抽象类是表示字节输出流的所有类的超类

子类名特点:子类名称都是以其父类名作为子类名的后缀

4.2字节流写数据

4.2.1常用字节流写数据的类:

void write(int b) 将指定的字节写入此文件输出流 一次写一个字节数据
void write(byte[] b) 将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据
void write(byte[] b, int off, int len) 将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据

代码:

import java.io.*;

public class CreateDir {
    public static void main(String[] args) {
        FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");
//FileOutputStvoid write(int b):将指定的字节写入此文件输出流
        fos.write(97);
        fos.write(98);
        fos.write(99);
        fos.write(100);
        fos.write(101);
        fos.close;
    }
}

4.2.2换行和追加

(1)在字节流中如何实现换行呐?在不同的操作系统中换行是不一样的:

windows:\r\n

linux:\n

mac:\r

(2)字节流写数据如何实现追加写入

public FileOutputStream(String name,boolean append)

创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头

4.3字节流读数据

读取数据使用read方法:每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回-1。

代码如下:

public class FileInputStreamDemo01 {
    public static void main(String[] args) throws IOException {
        //创建字节输入流对象
        //FileInputStream(String name)
        FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");

        int by;
        /*
            fis.read():读数据
            by=fis.read():把读取到的数据赋值给by
            by != -1:判断读取到的数据是否是-1
         */
        //一个一个的读
        while ((by=fis.read())!=-1) {
            System.out.print((char)by);
        }
        //一个指定的数组长度来读
        byte[] bys = new byte[1024]; //1024及其整数倍
        int len;
        while ((len=fis.read(bys))!=-1) {
            System.out.print(new String(bys,0,len));
        }

        //释放资源
        fis.close();
    }
}

5、字符流

5.1由来

字符流的由来:因为数据编码的不同,因而有了对字符进行高效操作的流对象,字符流本质其实就是基于字节流读取时,去查了指定的码表,而字节流直接读取数据会有乱码的问题(读中文会乱码)。

字节流读取中文字符时,可能不会显示完整的字符,那是因为一个中文字符占用多个字节存储。

而字符流 = 字节流 + 编码表

5.2字符流写数据

字符流写数据常用的方法

void write(int c) 写一个字符
void write(char[] cbuf) 写入一个字符数组
void write(char[] cbuf, int off, int len) 写入字符数组的一部分
void write(String str) 写一个字符串
void write(String str, int off, int len) 写一个字符串的一部分

刷新和关闭方法:

flush() 刷新流,之后还可以继续写数据
close() 关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据

示例代码:

        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));

        //void write(int c):写一个字符
        osw.write(97);

        //void writ(char[] cbuf):写入一个字符数组
        char[] chs = {'a', 'b', 'c', 'd', 'e'};
        osw.write(chs);

        //void write(char[] cbuf, int off, int len):写入字符数组的一部分
        osw.write(chs, 0, chs.length);
        osw.write(chs, 1, 3);

        //void write(String str):写一个字符串
        osw.write("abcde");

        //void write(String str, int off, int len):写一个字符串的一部分
        osw.write("abcde", 0, "abcde".length());
        osw.write("abcde", 1, 3);

        //释放资源
        osw.close();

5.3字符流读数据

读数据的两种方法

int read()一次读一个字符数据int read(char[] cbuf)一次读一个字符数组数据

代码示例:

  InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\ConversionStreamDemo.java"));

        //int read():一次读一个字符数据
        int ch;
        while ((ch=isr.read())!=-1) {
            System.out.print((char)ch);
        }

        //int read(char[] cbuf):一次读一个字符数组数据
        char[] chs = new char[1024];
        int len;
        while ((len = isr.read(chs)) != -1) {
            System.out.print(new String(chs, 0, len));
        }

6、IO流小结

字节流:

字符流:

如果我们需要追求效率我们可以选择字符流和字节流都具有的Buffered开头的类使用方法和字节流字符流的使用方法相同。在我们使用了流之后我们需要关闭流,如果不关闭占用的资源就会很多太多了就会影响我们的运行速度。

7、特殊操作流

特殊操作流一般使用的时候比较少就只给大家列出来知道有这个流是拿来干嘛的,如果在使用中需要用到特殊操作流的话我们可以去查API查看具体的使用方法。

7.1标准输入输出流

- public static final InputStream in:标准输入流。通常该流对应于键盘输入或由主机环境或用户指定的另一个输入源
- public static final PrintStream out:标准输出流。通常该流对应于显示输出或由主机环境或用户指定的另一个输出目标

7.2字节打印流

- PrintStream(String fileName):使用指定的文件名创建新的打印流

- 使用继承父类的方法写数据,查看的时候会转码;使用自己的特有方法写数据,查看的数据原样输出

- 可以改变输出语句的目的地

​    public static void setOut(PrintStream out):重新分配“标准”输出流

7.3对象序列化流和对象反序列化流

7.3.1对象序列化流

对象序列化介绍

  • 对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象
  • 这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型、对象的数据和对象中存储的属性等信息
  • 字节序列写到文件之后,相当于文件中持久保存了一个对象的信息
  • 反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化

对象序列化流: ObjectOutputStream

  • 将Java对象的原始数据类型和图形写入OutputStream。 可以使用ObjectInputStream读取(重构)对象。 可以通过使用流的文件来实现对象的持久存储。 如果流是网络套接字流,则可以在另一个主机上或另一个进程中重构对象

7.3.1对象反序列化流

对象反序列化流: ObjectInputStream

  • ObjectInputStream反序列化先前使用ObjectOutputStream编写的原始数据和对象

7.4Properties集合

当我们需要将集合和IO流结合使用的时候我们就需要使用到Properties集合。

7.4.1介绍

是一个Map体系的集合类

Properties可以保存到流中或从流中加载

属性列表中的每个键及其对应的值都是一个字符串

由介绍我们知道这个集合的底层是个Map集合所有和Map集合存储使用是差不多的。

7.4.2Properties作为Map集合的特有方法

Object setProperty(String key, String value) 设置集合的键和值,都是String类型,底层调用 Hashtable方法 put
String getProperty(String key) 使用此属性列表中指定的键搜索属性
Set<String> stringPropertyNames() 从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串

7.4.3Properties和IO流相结合的方法

void load(InputStream inStream) 从输入字节流读取属性列表(键和元素对)
void load(Reader reader) 从输入字符流读取属性列表(键和元素对)
void store(OutputStream out, String comments) 将此属性列表(键和元素对)写入此 Properties表中,以适合于使用 load(InputStream)方法的格式写入输出字节流
void store(Writer writer, String comments) 将此属性列表(键和元素对)写入此 Properties表中,以适合使用 load(Reader)方法的格式写入输出字符流

8、总结

以上就是我给大家总结的关于IO流的一些常用知识,如果有没有总结到的或者总结的不好的请多多包含或者给博主指出来,博主继续努力学习改进自己的不足。

到此这篇关于Java新手学习之IO流简单使用的文章就介绍到这了,更多相关Java IO流的简单使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java中IO流概述

    目录 1.InputStream 和 OutputStream 继承结构图: 2.Reader 和 Writer 继承结构图: 3. 内容 4.面试题 1.字节流和字符流的区别? 2.什么是 IO 流? 3.有哪些可用的 Filter 流? 4.Java 中有几种类型的流? 5.如何实现对象克隆? 6.什么是缓冲区?有什么作用? 总结 1.InputStream 和 OutputStream 继承结构图: 2.Reader 和 Writer 继承结构图: 3. 内容 3.1 Java 流概述文件

  • java中的IO流

    目录 java中的IO流 1.普通字节流 2.字节缓冲流 3.转换流 4.常用的IO类FileReader和BufferedReader 5.总结 java中的IO流 前言: 在java中IO类很庞大,初学的时候觉得傻傻分不清楚.其实java流归根结底的原理是普通字节流,字节缓冲流,转换流.最基础的是普通字节流,即从硬盘读取字节写入到内存中,但在实际使用中又发现一些特殊的需求,所以java语言的设计者这引入了字节缓冲流和转换流.所有的java IO类对IO的处理都是基于这三种流中的一种或多种:在

  • Java IO流深入理解

    目录 阻塞(Block)和非阻塞(Non-Block) 同步(Synchronization)和异步(Asynchronous) BIO与NIO对比 面向流与面向缓冲 阻塞与非阻塞 选择器的问世 Java NIO三件套 缓冲区Buffer Buffer的基本的原理 缓冲区分配 选择器Selector 通道Channel 使用NIO读取数据 使用NIO写入数据 IO多路复用 总结 阻塞(Block)和非阻塞(Non-Block) 阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,

  • Java全面解析IO流相关知识

    目录 前言 一.File 1.File类的概述和构造方法 2.File类创建功能 3.File类判断和获取功能 4.File类删除功能 二.字节流 1.IO流的概述和分类 2.字节流写数据 3.字节流写数据的两个小问题 字节流写数据如何换行 字节流写数据如何实现追加写入 4.字节流写入数据假异常处理 5.字节流读数据(重点) 6.字节缓冲流 7.如何选择怎样得数据读取呢? 三.字符流 1.为什么会出现字符流? 2.字符串中的编码解码问题 3.如何实现解决编译解码的问题 4.字符流写数据的方法 5

  • java基础入门之IO流

    目录 io学习框架: 文件: Io流的原理: 节点流和处理流: BufferWriter: 处理字节的处理流: 标准输入和输出: 转换流: 打印流: Properties类: 总结 io学习框架: 文件: 保存数据的地方. 1)常见文件对象的相关构造器和方法: 当进行File file = new File(filePath);只是在内存上有一个文件对象: 只有file.createNewFile();才会在磁盘创建文件 获取文件的相关信息: utf8中,一个汉字是三个字节,所以当用字节流的re

  • Java新手学习之IO流的简单使用

    目录 前言 IO流 1.基本概念 2.IO流分类 3.File 3.1File基本概念 3.2创建文本 3.3创建目录 3.4判断.读取和删除 4.字节流 4.1字节流的抽象基类 4.2字节流写数据 4.3字节流读数据 5.字符流 5.1由来 5.2字符流写数据 5.3字符流读数据 6.IO流小结 7.特殊操作流 7.1标准输入输出流 7.2字节打印流 7.3对象序列化流和对象反序列化流 7.4Properties集合 8.总结 前言 在我们平时使用图形化界面的时候,会发现来建立一个文件夹或者一

  • Java超详细梳理IO流的使用方法上

    目录 Java语言的输入输出类库 1.流的概念 2.流的分类 3.流的作用 4.输入输出流类库 使用InputStream和OutputStream流类 1.基本输入输出流 1.InpitStream流类 2.OutputStream流类 2.输入输出流的应用 2.1文件输入输出流 2.2顺序输入流 2.3管道输入输出流 2.4过滤输入输出流 2.5标准输入输出 你要学会: 流的概念 处理字节流的类 处理字符流的类 Java标准输入输出 文件管理类 Java语言的输入输出类库 1.流的概念 流是

  • Java文件操作之IO流 File类的使用详解

    File类概述 File类能新建.删除.重命名文件和目录,但不能访问文件内容本身,如果需要访问文件内容本身,则需要使用后续的输入/输出流. 要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录. File对象可以作为参数传递给流的构造器. 常用构造器 ①public File(String pathname) 以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果是相对路径,则默认相

  • C++学习之IO流(输入输出流)详解

    目录 介绍 基本输入.输出流 freopen 字符类的处理 介绍 流: 若干字节数据从一端到另一端我们叫做流 例如:操作文件,从程序到文件,数据的流动的操作称为流操作 流类体系 专门处理输入输出流.字符流.文件流,包含有: 流对象 流运算符 >>  << 输入/出流对象 + 流运算符 >>  <<---处理输入输出的数据 字符流对象 + 流运算符 >>   <<   ---处理字符流 文件的对象 + 流运算符 >>  &l

  • Java利用Socket和IO流实现文件的上传与下载

    目录 背景概述 核心技术 Config Client Server UploadRunnableImpl DownloadRunnableImpl 背景概述 本文利用Socket编程和IO流技术实现文件的上传与下载. 核心技术 1.TCP 2.Socket 3.FileInputStream与FileOutputStream 4.DataInputStream与DataOutputStream 5.多线程 Config package com.io14; /** * 本文作者:谷哥的小弟 * 博

  • 新手小白看过来学JAVA必过IO流File字节流字符流

    目录 IO简介 1.流Stream 2.IO流的继承结构 3 File文件类 3.1概述 3.2创建对象 3.3常用方法 3.4 练习:测试常用方法 4.字节流读取 4.1 InputStream抽象类 4.2 FileInputStream子类 4.3 BufferedInputStream子类 4.4 练习:字节流读取案例 5.字符流读取 5.1 Reader抽象类 5.2 FileReader子类 5.3 BufferedReader子类 5.4 练习:字符流读取案例 6.字节流写出 6.

  • Java IO流学习总结之文件传输基础

    一.Java IO流总览 二.File类 2.1 常用API package pkg1; import java.io.File; import java.io.IOException; /** * @author Administrator * @date 2021/4/2 */ public class FileDemo { public static void main(String[] args) { // 了解构造函数,可查看API File file = new File("d:\\

  • 【Java IO流】字节流和字符流的实例讲解

    字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作--也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3.从流的内容来讲,有字节和字符之分. 这篇文章先后讲解IO流中的字节流和字符流的输入和输出操作. 一.字节流 1)输入和输出流 首先,字节流要进行读和写,也就是输入和输出,所以它有两个抽象的父类InputStream.OutputStream. InputStream抽象了应用程序读取数据的方式,即

  • Java IO流和文件操作实现过程解析

    Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中. 控制台输入 BufferedReader br = new BufferedReader(new InputStreamReader(Syste

随机推荐