初识JAVA的IO流应用

IO流应用

这里我也不对应讲解IO流是啥,有那些方法,下面直接根绝代码,每段代码都会有一段解析

01:文件的复制

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;

public class demo06 {
		public static void main(String[] args) throws IOException {
			File f=new File("D:/测试/q.txt");
			OutputStream os=null;
			InputStream is=null;
			try {
				os=new FileOutputStream("D:/帅帅哒.txt");
				if(f.exists()) {
					is=new FileInputStream(f);
					int len;
					byte bt[]=new byte[(int)f.length()];
					while((len=is.read(bt))!=-1) {
						os.write(bt, 0, len);
					}
				}
			}catch (Exception e) {
				e.printStackTrace();
			}finally {
				os.close();
				is.close();
			}
		}
}

/**
 * 1.File f=new File("D:/测试/q.txt");		创建一个文件类,并且指明路径,系统会到这个路劲下去寻找
 * 
 * 2.os=new FileOutputStream("D:/帅帅哒.txt");	创建一个可写入文件的类,如果类不存在,会创建一个
 * 
 * 3.f.exists()		判断文件是否存在
 * 
 * 4.new FileInputStream(f);	创建一个输出流的文件类
 * 
 * 5.f.length()		返回文件的字节数,,这里可以直接定义byte bt[]=new byte[1024];
 * 
 * 6.is.read(bt)		输入流将读取的字符都存在bt这个数组中,并且最大可读取bt.lengt()的长度
 * 
 * 7.os.write(bt, 0, len);		第一个参数代表数据源,也就是从那写入数据,第二个参数代表下标从多少开始,第三个参数代表读取多少个
 * 
 * 8.记着最后关闭输入输出流,避免资源浪费
 * */

02字节流输出:

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class demo06 {
		public static void main(String[] args) throws IOException {
			File f=new File("D:/测试/q.txt");
			InputStream is=new FileInputStream(f);
			byte bt[]=new byte[(int) f.length()];
			int len=0;
			while((len=is.read(bt))!=-1) {
				String str=new String(bt, "gbk");
				System.out.println(str);
			}
		}
}

03:缓冲区输出:

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class demo06 {
		public static void main(String[] args) throws IOException {
			File f=new File("D:/测试/q.txt");
			InputStreamReader isr=new InputStreamReader(new FileInputStream(f),"gbk");
			BufferedReader br=new BufferedReader(isr);
			List list=new ArrayList();
			String str=null;
			while((str=br.readLine())!=null)
				list.add(str);
			for (Object object : list) {
				System.out.println(object);
			}
			br.close();
			isr.close();
		}
}

04:覆盖写入数据

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class demo06 {
		public static void main(String[] args) throws IOException {
			File f=new File("D:/测试/q.txt");
			OutputStream os=new FileOutputStream(f);
			String str="宝宝很帅";
			byte bt[]=str.getBytes();
			os.write(bt, 0, bt.length);
		}
}
/**
 *	是会覆盖掉以前存的数据
 */

05:不覆盖写入数据

 import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class demo06 {
		public static void main(String[] args) throws IOException {
			File f=new File("D:/测试/q.txt");
			OutputStream os=new FileOutputStream(f,true);
			String str="宝宝很美";
			byte bt[]=str.getBytes();
			os.write(bt, 0, bt.length);
		}
}

06:打印文件层次结构

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class demo06 {
		public static void main(String[] args) throws IOException {
			File f=new File("D:/测试");
			print(f, 1);
		}
		
		public static void print(File file,int a) {
			if(file.isFile()) {							//判断是否是文件
				System.out.println(file.getName());		//是文件就直接打印,说明输入的就不是目录
			}else {
				File list[]=file.listFiles();			//获取输入的目录的子目录
				if(a==1) {								//打印顶层目录名字
					System.out.println(file.getName());
				}
				for(int i=0;i<list.length;i++) {
					for(int n=0;n<a;n++) {				
						System.out.print("----");			//结构化输出,仅仅好看而已
					}
					System.out.println(list[i].getName());		//打印当前目录
						
					if(list[i].isDirectory()) {				//如果是目录,就继续调用方法
						print(list[i],a+1);
					}
				}
			}
		}
}

07:打印指定目录下的指定后缀文件

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class demo06 {
		public static void main(String[] args) throws IOException {
			File f=new File("D:/测试");
			List list=new ArrayList();
			print(f, 1);
		}
		
		public static void print(File file,int a) {
			if(file.isFile()) {							//判断是否是文件
				System.out.println(file.getName());		//是文件就直接打印,说明输入的就不是目录
			}else {
				File list[]=file.listFiles();			//获取输入的目录的子目录
				for (File file2 : list) {
					if(file2.isDirectory())				//如果获取的是目录文件,就继续访问目录下的子目录
						print(file2, a+1);
					String str=file2.getName();			//获取文件的名字
					String str1[]=new String[2];		
					if(str.contains(".")) {				//判断名字中是否包含.
						str1=str.split("\\.");			//利用分隔符,将后缀分割出来
						if(str1[1].equals("txt"))
							System.out.println(str);
					}					
				}
			}
		}
}

总结:

IO流的应用很多,最开始没学数据库的时候,将数据保存在txt文件,然后又从txt中导入数据,这些都是日常的应用,IO只要多练习,搞懂输入、输出、缓冲区以及文件的关系,还是不难

猜你喜欢

转载自blog.csdn.net/qq_37871033/article/details/86548388
今日推荐