Java I/O(输入输出流)

Posted 王睿丶

tags:

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

1、 创建文件的两种方式

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

/**
 * 创建文件的两种方式
 * @author wangrui
 *
 */
public class Main1 {
	public static void main(String[] args) {
		
		/*
		 * △ 注意一:Linux 系统下:根目录从/开始,Windows则是从盘开始例如:C:
		 * △ 注意二:FileOutputStream 只是创建文件,这里指创建hello文件,若 /tmp/wangrui/ 缺少某个文件夹(tmp或wangrui都不行)或路径不对则都会抛出异常。
		 * */
		
		//方式一:
		try {
			OutputStream f = new FileOutputStream("/tmp/wangrui/");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		//方式二:
		File f = new File("/tmp/wangrui/hello");
		try {
			OutputStream fOut = new FileOutputStream(f);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
}

2、读取文件的两种方式

/**
 * 读取文件的两种方式
 * @author wangrui
 *
 */
public class Main2 {

	public static void main(String[] args) {
		
		//方式一:
		try {
			InputStream f1 = new FileInputStream("/tmp/wangrui/hello");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//方式二:
		File f = new File("/tmp/wangrui/hello");
		try {
			InputStream f2 = new FileInputStream(f);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

3、InputStream 和 OutputStream 实战小例子

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 *  InputStream 和 OutputStream 实战小例子
 * @author wangrui
 *
 */
public class Main3 {
	
	  public static void main(String[] args) {
	        try {
	            byte bWrite[] = { 11, 21, 3, 40, 5 };
	            //创建输出流,若文件指定文件不存在会自动创建一个文件
	            OutputStream os = new FileOutputStream("/tmp/wangrui/test.txt");
	            //写入数据
	            for (int x = 0; x < bWrite.length; x++) {
	                os.write(bWrite[x]); // writes the bytes
	            }
	            //关闭资源
	            os.close();
	            
	            //创建输入流
	            InputStream is = new FileInputStream("/tmp/wangrui/test.txt");
	            //获取大小
	            int size = is.available();
	            //读取
	            for (int i = 0; i < size; i++) {
	                System.out.print((char) is.read() + "  ");
	            }
	            //关闭资源
	            is.close();
	        } catch (IOException e) {
	            System.out.print("Exception");
	        }
	    }
}

4、InputStream 和 OutputStream 实战小例子 二进制造成解决乱码问题

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 * InputStream 和 OutputStream 实战小例子 二进制造成解决乱码问题
 * @author wangrui
 *
 */
public class Main4 {
	   public static void main(String[] args) throws IOException {
		   
		   	//构建FileOutputStream对象,文件不存在会自动新建
	        File f = new File("/tmp/wangrui/a.txt");
	        FileOutputStream fop = new FileOutputStream(f);
	        
	        // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
	        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
	       
	 
	        // 写入到缓冲区
	        writer.append("中文输入");
	 
	        // 换行
	        writer.append("\\r\\n");

	        // 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入
	        writer.append("English");

	        // 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
	        writer.close();

	        // 关闭输出流,释放系统资源
	        fop.close();

	        // 构建FileInputStream对象
	        FileInputStream fip = new FileInputStream(f);

	        // 构建InputStreamReader对象,编码与写入相同
	        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");

	        //用 StringBuffer 拼接字符更高效,线程也更安全
	        StringBuffer sb = new StringBuffer();
	        while (reader.ready()) {
	            // 转成char加到StringBuffer对象中
	            sb.append((char) reader.read());
	        }
	        System.out.println(sb.toString());
	        // 关闭读取流
	        reader.close();
	 
	        // 关闭输入流,释放系统资源
	        fip.close();
	    }
}

5、创建目录

import java.io.File;

/**
 * 创建目录
 * @author wangrui
 *
 */
public class Main5 {

	public static void main(String[] args) {
		指定路径
		String dirname = "/tmp/wangrui/java/bin";
		//创建文件对象
		File d = new File(dirname);
		//创建一个文件夹和它的所有父文件夹
		//d.mkdirs();
		if(d.mkdir()) {
			System.out.println("可以创建");
		}else {
			System.out.println("该文件已存在或指定路径还不存在,不可以创建");
		}
	}
}

6、读取目录

import java.io.File;

/**
 * 读取目录
 * @author wangrui
 *
 */
public class Main6 {

	public static void main(String[] args) {
			//指定路径
		 	String dirname = "/tmp";
	        //创建File 文件对象
		 	File f = new File(dirname);
		 	//判断该文件是否为目录
	        if(f.isDirectory()) {	
	        	System.out.println("目录:" + dirname);
	        	 //获取该目录下的所有文件和目录的文件名 
	        	String s[] = f.list();	
	        	for(int i=0;i<s.length;i++) {
	        		//得到具体路径(文件、文件夹)
	        		File f1 = new File(dirname + "/" + s[i]);
	        		//判断该文件是否为目录
	        		if(f1.isDirectory()) {
	        			System.out.println(s[i] + "是一个目录");
	        		}else {
	        			System.out.println(s[i] + "是一个文件");
	        		}
	        	}
	        }else {
	        	System.out.println("不是一个目录");
	        }
	}
}

7、删除目录

import java.io.File;

/**
 * 删除目录
 * @author wangrui
 *
 */
public class Main7 {

	
	
	public static void main(String[] args) {
		//创建文件对象
		File folder = new File("/tmp/java/");
		//删除目录
		deleteFolder(folder);
	}
	
	//删除文件及目录
	public static void deleteFolder(File folder) {
		//listFiles是获取该目录下所有文件和目录的绝对路径
		File[] files = folder.listFiles();
		//△注意:使用 java.io.File.delete() ,需要注意的是当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。
		if(files != null) {
			//获取每一个具体的File
			for(File f:files) {
				//判断该文件是否为目录
				if(f.isDirectory()) {
					deleteFolder(f);	//是目录再重新走一遍流程-递归
				}else {
					f.delete();			//不是目录,就直接删除即可
				}
			}
		}
		folder.delete();
	}
	
}

以上是关于Java I/O(输入输出流)的主要内容,如果未能解决你的问题,请参考以下文章

Java中的I/O流

java I/O系统(输入输出流)

Java I/O - 输入/输出流

Java输入及输出处理(I/O流)

java—— IO 输入流输出流

Java 输入输出流