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只要多练习,搞懂输入、输出、缓冲区以及文件的关系,还是不难