Java IO流

Posted 菜菜小谭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java IO流相关的知识,希望对你有一定的参考价值。


字节 字符

输入 InputStream Reader


输出 OutputStream Writer

 

**********************字节写***********************************

FileOutputStream


1.public void write(int b) throws IOException

每次写1个字节

2.public void write(byte[] b) throws IOException

每次写1个字节数组


知识点:

1. 写的时候 如果运行2次,第二次还会创建一个新的文件,重新写(相当于覆盖)

建立通道的时候 传入一个boolean类型的变量 true 表示追加


2. 产生的文件的编码方式 由 getBytes("utf-8") 决定


演示代码:

package com.chapter13.演示字节写;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

/**
* 公司:蓝桥软件学院
* 作者:zhangzy
* 时间:2017年7月24日 上午9:37:41
* 功能:演示字节写
*/
public class TestFileOutputStream {

public static void main(String[] args) {

//一.建立通道
String s = "你好";

byte[] byteArr = null;
try {
byteArr = s.getBytes("utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
//写的时候 如果写入的文件不存在 会先创建这个文件
FileOutputStream fos = null;
try {
fos = new FileOutputStream("d:\jidi16\io\HelloIO.txt",true);//true 追加
} catch (FileNotFoundException e) {

System.out.println("文件夹没有找到");
e.printStackTrace();
System.exit(-1);
}

//二.利用write写
try {
//fos.write(65);
fos.write(byteArr);
} catch (IOException e) {
System.out.println("写入失败");
e.printStackTrace();
}finally{
//三.关闭通道
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
System.out.println("关闭fos通道失败");
e.printStackTrace();
}
}
}

}
}


**********************字符写***********************************

FileWriter

常用方法

1. public void write(int b) throws IOException


每次写1个字符


2. public void write(char[] b) throws IOException

每次写1个字符数组

3. public void write(String s) throws IOException

每次写1个字符串


演示代码:

package com.chapter13.演示字节写;

import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

/**
* 公司:蓝桥软件学院
* 作者:zhangzy
* 时间:2017年7月24日 上午9:54:57
* 功能:演示字符写
*/
public class TestFileWriter {

public static void main(String[] args) {

//一.建立通道
char c = ‘你‘;
char[] charArr = {‘你‘,‘好‘,‘啊‘};
String s = "你好世界";

//写的时候 如果写入的文件不存在 会先创建这个文件
FileWriter fos = null;
try {
fos = new FileWriter("d:\jidi16\io\HelloIO.txt",true);//true 追加
} catch (IOException e) {

System.out.println("文件夹没有找到");
e.printStackTrace();
System.exit(-1);
}

//二.利用write写
try {

//fos.write(c);//每次写一个字符
//fos.write(charArr);//每次写一个字符数组
fos.write(s);//每次写一个字符串
} catch (IOException e) {
System.out.println("写入失败");
e.printStackTrace();
}finally{
//三.关闭通道
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
System.out.println("关闭fos通道失败");
e.printStackTrace();
}
}
}

}
}

 

***********************************文件复制***********************************

原理: 读进来 马上把它写出去


演示代码:


package com.chapter13.演示字节写;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
* 公司:蓝桥软件学院
* 作者:zhangzy
* 时间:2017年7月21日 下午2:10:56
* 功能:演示文件复制
*/
public class TestFileCopy {

public static void main(String[] args) {

//一.建立通道
FileInputStream fis = null;
int b;

try {
fis = new FileInputStream("d:\jidi16\io\test.jpg");
} catch (FileNotFoundException e) {
System.out.println("文件没有找到");
e.printStackTrace();

System.exit(-1);
}

FileOutputStream fos = null;
try {
fos = new FileOutputStream("d:\jidi16\io\copy.jpg");
} catch (FileNotFoundException e1) {

System.out.println("文件夹不存在");
e1.printStackTrace();
}



byte[] byteArr = new byte[1024];

long startTime = System.currentTimeMillis();//获取举例1970年1月1日 00:00:00 的毫秒数

//二.利用read循环读

//fis.read() 每次读一个字节 把读到的这1个字节 存到int类型的低8位中
// read() 如果读到了文件末尾 返回-1
try {
while((b=fis.read(byteArr))!=-1){

fos.write(byteArr);
}
} catch (IOException e) {
System.out.println("复制文件失败");
e.printStackTrace();
}finally{

//三.关闭通道
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
System.out.println("关闭fis通道失败");
e.printStackTrace();
}
}

if(fos!=null){
try {
fos.close();
} catch (IOException e) {
System.out.println("关闭fos通道失败");
e.printStackTrace();
}
}

long endTime = System.currentTimeMillis();//获取举例1970年1月1日 00:00:00 的毫秒数


System.out.println("一共使用了" + (endTime-startTime) + "毫秒");
System.out.println("复制完成");
}
}
}

 


































































































































































































以上是关于Java IO流的主要内容,如果未能解决你的问题,请参考以下文章

java的io中为啥有那么多种流啊?

Java之IO流总结

java IO流 IO流概述

Java 之IO流及应用

java IO流

Java IO流