Java中的IO流修改

Java.IO

Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。

Java.IO流的分类

  • 字节流:数据流中的最小的数据单元是字节,一次读入读出8位二进制;
  • 字符流数据流中的最小的数据单元是字符,一次读入读出16位二进制,java中的字符是Unicode编码,一个字符占用两个字节。

字节流

inputStream类(输入字节流)

inputstream类inputStream类是个抽象类,是所有字节输出流的超类。们可以认为InputStream提供了一种统一的对待输入的方法,可将多种不同类型的数据源都用统一的读取方式对待。要说明的是,InputStream是用来操控字节输入流的,它所提供的方法也是针对字节的

inputStream类的常用子类:

InputStream子类           数据源类型
ByteArrayInputStream     包含一个内存缓冲区,字节从中取出。
FileInputStream          从文件中获得字节。
ObjectInputStream        用来恢复被序列化的对象。
PipedInputStream         管道输入流,读取管道内容。多和PipedOutputStream一起用于多线程通信。
SequenceInputStream      是多种输入流的逻辑串联,从第一个输入流读取,直到最后一个输入流。
StringBufferInputStream  读取的字节由字符串提供。
FileInputStream类
创建一个FileInputStream类的对象用来获取src目录下的a.txt文件
	/**
	 * 使用InputStream抽象类的子类FileInputStream类 从一个文件夹中读取数据流
	 * (FilterInputStream的方法与InputStream中的方法没什么不同。
	 * 但FilterInputStream的子类却给出了更多的实现。)
	 */
	public static void test1() {
		try {
			// 读取src下的a.txt文件
			FileInputStream is = new FileInputStream("src/a.txt");
			int a = 0;
			// 如果没读到文件尾,则继续执行读取命令
			while ((a = is.read()) != -1) {
				// 因为是a里面装的都是字节
				// 所以要转换为char类型
				System.out.print((char) a);
			}
			// 关闭流(使用完都要关闭)
			is.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
运行结果:
Java中的IO流修改_第1张图片

InputStream提供了以下方法

 方法                 解释
 available()         返回此输入流下一个方法可以读取的字节数。
 close()             关闭此输入流并释放相应资源。
 mark(int)           在此输入流中标记当前的位置。
 markSupported()     测试此输入流是否支持mark和reset方法。
 read()              从此输入流中读取下一个字节(此方法是抽象方法,子类必须实现该方法)。
 read(byte[])        从输入流中读取一定数量的字节,存储在参数指定的字节数组中。
 read(byte[],int,int)从输入流中指定位置起读取若干字节存储在指定字节数组中。
 reset()             将此输入流定位到最后一次mark的位置。
 skip(long)          跳过和丢弃此输入流中数据的若干字节。

OutputStream类(输出字节流)

OuputStream类:OutputStream与InputStream一样,都是抽象类,是输出字节流的所有类的超类。它的作用是接收输出字节并将这些字节输送到某个接收的地方。

OutputStream的子类分为以下几种:

OutputStream子类           解释
ByteArrayOutputStream     该类实现了一个输出流,其数据被写入由byte数组充当的缓冲区,缓冲区会随着数据的不断写入而自动增长。 
FileOutputStream          该类实现了一个输出流,其数据写入文件。
ObjectOutputStream        该类将实现了序列化的对象序列化后写入指定地方。  
PipedOutputStream         管道的输出流,是管道的发送端
FileOutputStream类
使用FileOutputStream类将一个字符写到src目录下的b.txt文件中
	/**
	 * 使用FileOutputStream类将一个字符写到文件中
	 */
	public static void test2() {
		try {
			//将os里面的内容输出到src的b.txt文件中
			OutputStream os = new FileOutputStream("src/b.txt");
			//将字节写入os输出流中
			os.write(97);
			//刷新缓存
			os.flush();
			//关闭输出流
			os.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} 
	}

输出结果

Java中的IO流修改_第2张图片

使用FileOutputStream类将一个字符串写到文件中
	/**
	 * 使用FileOutputStream类将一个字符串写到文件中
	 */
	public static void test3() {
		String content = "I'm a programmer";
		try {
			OutputStream os = new FileOutputStream("src/c.txt");
			os.write(content.getBytes());
			os.flush();
			os.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
运行结果
Java中的IO流修改_第3张图片

OutputStream的主要方法有:

方法                       解释
close()                   关闭此输出流并释放相应资源
flush()                   刷新此输出流并强制写出所有缓冲的输出字节。
write(byte[])             将字节写入此输出流。
write(byte[],int,int)    将指定的若干字节写入此输出流。
write(int)                将指定若干字节写入此输出流。

字符流

Reader类(输入字符流)

Reader类:用于读取字符流的抽象类。

使用Read类读取src目录下的d.txt文件内容
	/**
	 * 使用Reader类读取文件内容
	 */
	public static void test4() {
		
		FileInputStream fis;
		try {
			fis = new FileInputStream("src/d.txt");
			Reader reader = new InputStreamReader(fis,"utf-8");
			int a ;
			while ((a=reader.read())!=-1) {
				System.out.print((char)a);
			}
			fis.close();
			reader.close();
		}
		catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
读取结果
Java中的IO流修改_第4张图片

Writer类(输出字符流)

writer类:写入字符流的抽象类。

使用Writer类将内容写入文件
	/**
	 * 使用Writer类将内容写入src目录下的e.txt文件
	 */
	public static void test5() {
		FileOutputStream fos;
		try {
			fos = new FileOutputStream("src/e.txt",true);//加了true属性,则是追加写入
			Writer writer = new OutputStreamWriter(fos,"GBK");
			writer.write("I'm 漂亮女孩---");
			writer.flush();
			fos.close();
			writer.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
写入 3次的结果
Java中的IO流修改_第5张图片

Scanner类

使用Scanner读取文件
	/**
	 * Scanner 类使读取文件更为简单
	 * 使用Scanner(File source) 构造一个新的Scanner,它生成的值是从指定文件扫描的
	 */
	public static void  test6() {
		try {
			FileInputStream fis = new FileInputStream("src/f.txt");
			Scanner scanner = new Scanner(fis);
			while (scanner.hasNextLine()) {
				System.out.println(scanner.nextLine());
			}
			fis.close();
			scanner.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
读取结果
Java中的IO流修改_第6张图片

printWriter类

使用printWriter将内容写入文件中
    /**
     *为了能够输出数据的时候更方便,我们要引入printWriter
     */
    public static void test7() {
        try {
            PrintWriter pw = new PrintWriter("src/g.txt");
            pw.print("I am 零度! 我");
            pw.flush();
            pw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
写入结果
Java中的IO流修改_第7张图片

你可能感兴趣的:(java)