Java_18 输入/输出流

来源:互联网 发布:java解析xlsx文件 编辑:程序博客网 时间:2024/06/02 05:38

1.流概念

流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。虽然I/O流经常与磁盘文件存取有关,但是程序的源和目的地也可以是键盘、鼠标、内存或显示器窗口等。源可以是文件、网络、压缩包或者其他数据源。输出流的指向是数据要到达的目的地,程序通过向输出流中写入数据把信息传递到目的地,输出流的目标是文件、网络、压缩包、控制台和其他数据输出目标所有输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;所有输出流都是抽象类OutputStream(字节输出流)或抽象类Write(字符输出流)的子类

2.输入流

InputStream类(字节输入流)的常用方法read()  从输入流中读取数据的下一个字节。返回0~225范围内的int字节值。如果已经到达流末尾没有可用字节,则返回值-1read(byte[] b)  从输入流中读入一定长度的字节,并以整数的形式返回字节数mark(int readlimit)  在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效之前允许读取的字节数reset()  将输入指针返回到当前所做的标记处skip(long n)  跳过输入流上的n个字节并返回实际跳过的字节数markSupported()  如果当前流支持mark()/reset()操作就返回trueclose()  关闭此输入并释放与该流关联的所有系统资源并不是所有的InputStream类的子类都支持InputStream中定义的所有方法,如skip()、mark()、reset()等,这些方法只对某些子类有用Reader类(字符输入流)并不是InputStream类的替换者,只是在处理字符串时简化了编程,Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类

3.输出流

OutputStream类(字节输出流)是字节输入流的抽象类,此抽象类表示输出字节流的所有类的超类OutputStream类的常用方法write(int b)  将指定的字节写入此输出流write(byte[] b)  将b.length个字节从指定的byte数组写入此输入流write(byte[] b,int off,int len)  将指定byte数组中从偏移量off开始的len个字节写入此输出流flush()  彻底完成输出并清空缓存区close()  关闭输出流Writer类(字符输出流)是字符输出流的抽象类,所有字符输出类的实现都是它的子类

4.范例

//显示指定类型的文件package File;import java.io.File;public class FileDemo1 {    public static void main(String[] args) {        File file = new File("e:/");        listFile(file);    }    public static void listFile(File file){        //判断是否是文件夹        if(file.isDirectory()){            File [] f = file.listFiles();            for (File f2 : f) {                if(f2.isDirectory()){                    listFile(f2);                }else{                    //正则表达式                    String name = f2.getName();                    String regex = "^.{1,}\\.txt$";                    if(name.matches(regex))                        System.out.println(f2.getName());                }            }        }else{      System.out.println(file.getAbsolutePath());             String name1 = file.getName();            String regex = "^.{1,}//.txt$";            if(name1.matches(regex))            System.out.println(file.getName());        }    }}
  protected void do_replaceButton_actionPerformed(ActionEvent e){            String before = beforeTextField.getText();  //获得替换前字符串            //省略校验代码            String after = afterTextField.getText();    //获得替换后字符串            //省略检验代码            FileReader reader = null;                   //创建文件读流            FileWriter writer = null;                   //创建文件写流            StringBuilder sb = new StringBuilder();     //使用StringBuilder对象保存文件            int flag = 0;                               //声明文件读入标识            char[] temp = new char[1024];               //使用字符数组读入文件            try{            reader = new FileReader(textFile);          //使用选择的文件创建读流            while ((flag=reader.read(temp))!=-1){                sb.append(temp);                        //读入文件中的内容            }            String content = sb.toString().replace(befor, after);//替换字符串            writer = new FileWriter(textFied);          //创建文件写流            writer.write(content);                      //将替换后的字符串写入到文件      }catch(FileNotFoundException e1){          e1.printStackTrace();      }catch(IOException e1){          e1.printStackTrace();      }finally{          //释放资源      }            JOptionPane.showMessageDialog(this, "字符串替换成功!");            return;    }
原创粉丝点击