(个人笔记)io流的简单使用

文件--什么是文件

文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的word文档、txt文件、excel文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频、声音...等

 

文件流--基本概念

文件在程序中是以流的形式来操作的。

流:数据在数据源(文件)和程序(内存)之间经历的路径

输入流:数据从数据源(文件)到程序(内存)的路径

输出流:数据从程序(内存)到数据源(文件)的路径

 

如何判断是输入流、输出流?

以内存为参照,如果数据流向内存流动,则是输入流;反之,则是输出流。

文件流--分类

java流分为两种流

1、字节流:可以用于读写二进制文件及任何类型文件byte

2、字符流:可以用于读写文本文件,不能操作二进制文件

              字节流                  字符流

输入       InputStream         Reader

输出       OutputStream      Writer

常用io流--文件对象

目的:文件数据源File类介绍(文件流对象中最为重要的File类,对File了解后对子类理解会更加容易)

File类--使用[Io01.java]

/**

 * File类的基本用法

 */

import java.io.*;//必需加载IO包

public class Io01 {

       public static void main(String[] args) {

              //创建一个文件对象

              File f1=new File("e:\\aa.txt");

              //得到文件的路径

              System.out.println("文件路径"+f1.getAbsolutePath());

              //得到文件的大小,字节数

              System.out.println("文件的大小"+f1.length());

             

              //创建文件夹

              File f3=new File("e:\\ff");

              //判断文件夹是否存在

              if(f3.isDirectory()){

                     System.out.println("文件夹存在,不能创建!");

              }else{

                     //创建文件夹

                     f3.mkdir();

              }

 

              //创建文件和创建文件夹

              File f2=new File("e:\\ff\\hsp.txt");

              //判断文件是否存在

              if(!f2.exists()){

                     //可以创建

                     try {

                            f2.createNewFile();//创建一个新文件

                     } catch (Exception e) {

                            e.printStackTrace();

                     }

                    

              }else{

                     System.out.println("文件存在,不能创建!");

              }

             

              //列出一个文件夹下面的所有文件

              File f4=new File("e:\\ff");

              //判断文件夹是事存在

              if(f4.isDirectory()){

                     //将文件夹的文件,传给lists数组

                     File lists[]=f4.listFiles();

                     //遍历数组

                     for(int i=0;i<lists.length;i++){

                            //输出文件夹下所有文件文件名

                            System.out.println("显示出文件名是"+lists[i].getName());

                     }

              }

       }

}

------------------------------------------------------------------------------

java文件编程--常用io流

常用io流--文件字节流

1、案例[Io02.java]:读取文件(文件字节输入流使用,目的:FileInputStream类)把用FileInputStream的对象把文件读入到内存

/**

 * File类的基本用法

 * io流--文件字节流

 * FileInputStream类的使用

 */

import java.io.*;

public class Io02 {

       public static void main(String[] args) {

              //得到一个文件对象,f指向e:\ff\hsp.txt文件

              File f=new File("e:\\ff\\hsp.txt");

              FileInputStream fis=null;

              try {

                     //因为File没有读写的能力,所以需要使用InputStream类

                     fis=new FileInputStream(f);

                     //定义一个字节数组,相当于缓存

                     byte []bytes=new byte[1024];

                     int n=0;//得到实际读取到的字节数

                     //循环读取

                     while((n=fis.read(bytes))!=-1){

                            //把字节转成String

                            String s=new String(bytes,0,n);

                            System.out.println(s);

                     }

              } catch (Exception e) {

                     e.printStackTrace();

              }finally{

                     //关闭文件流必需放在finally语句块中

                     try {

                            fis.close();

                     } catch (Exception e) {

                            e.printStackTrace();

                     }

              }

       }

}

-------------------------------------------------------------------------------

 

2、案例[Io03.java]:从键盘接收用户输入内容,并保存到文件中(文件字节输出流,目的:FileOutputStream)

/**

 * File类的基本用法

 * io流--文件字节流

 * FileOutputStream类的使用

 */

import java.io.*;

public class Io03 {

       public static void main(String[] args) {

              File f=new File("e:\\ff\\ss.txt");//直接覆盖写同一个文件

                            //字节输出流

              FileOutputStream fos=null;

              if(f.exists()){

                     System.out.println("文件已存在");

              }else{

                     try {

                            fos=new FileOutputStream(f);

                            String s="hello,world!\r\n";

                            String s1="中国人";

                            fos.write(s.getBytes());

                            fos.write(s1.getBytes());

                     } catch (Exception e) {

                            e.printStackTrace();

                     }finally{

                            try {

                                   fos.close();

                            } catch (Exception e2) {

                                   e2.printStackTrace();

                            }

                     }

              }

       }

}

-------------------------------------------------------------------------------

3、案例[Io04.java]:图片拷贝

/**

 * File类的基本用法

 * io流--文件字节流

 * 图片拷贝--FileInputStream类与 FileOutputStream类

 */

import java.io.*;

public class Io04 {

       public static void main(String[] args) {

              //先将图片读入到内存,再将内存中的图片写入到某个文件

              //因为二进制文件只能拿使用字节流来处理

              //输入流

              FileInputStream fis=null;

              //输出流

              FileOutputStream fos=null;

             

              try {

                     fis=new FileInputStream("e:\\ff\\a.jpg");

                     fos=new FileOutputStream("e:\\a.jpg");

                     byte buf[]=new byte[1024];

                     int n=0;//记录实际读取到的字节数

                     //循环读取图片

                     while((n=fis.read(buf))!=-1){

                            //输出到指定文件

                            fos.write(buf);

                     }

                    

              } catch (Exception e) {

                     e.printStackTrace();

              }finally{

                     //一定要关闭打开的文件流

                     try {

                            fis.close();

                            fos.close();

                     } catch (Exception e) {

                            e.printStackTrace();

                     }

              }

       }

}

-------------------------------------------------------------------------------

java文件编程--常用io流

常用io流--文件字符流

案例[Io05.java](文件字符输入、输出流,目的:FileReader、FileWriter类)读取一个文件并写入到另一个文件中char[]来中转

/**

 * File类的基本用法

 * io流--文件字符流,只能用于完全为字符的文件

 * TXT文件拷贝--FileReader类与 FileWriter类

 */

import java.io.*;

public class Io05 {

       public static void main(String[] args) {

              //文件取出字符流对象(输入流)

              FileReader fr=null;

              //写入到文件(输出流)

              FileWriter fw=null;

              try {

                     //创建fr对象

                     fr=new FileReader("e:\\ff\\hsp.txt");

                     //创建输出对象

                     fw=new FileWriter("e:\\hsp.txt");

                     //创建字符数组

                     char c[]=new char[1024];

                     int n=0;

                     //读入到内存

                     while((n=fr.read(c))!=-1){

                            //控制台输出TXT文件内容

                            String s=new String(c,0,n);

                            System.out.println(s);

                            fw.write(c, 0, n);

                     }

              } catch (Exception e) {

                     e.printStackTrace();

              }finally{

                     try {

                            fr.close();

                            fw.close();

                     } catch (Exception e) {

                            e.printStackTrace();

                     }

              }

       }

}

------------------------------------------------------------------------------

常用io流--缓冲字符流

为了提高效率引入了缓冲字符流

案例[Io06.java](文件缓冲字符流,目的:BufferedReader和BufferedWriter类介绍,直接操作String)

/**

 * File类的基本用法

 * io流--缓冲字符流

 * BufferedReader类与BufferedWriter类

 */

import java.io.*;

public class Io06 {

       public static void main(String[] args) {

              BufferedReader br=null;

              BufferedWriter bw=null;

              try {

                     //先创建FileReader对象

                     FileReader fr=new FileReader("e:\\ff\\hsp.txt");

                     br=new BufferedReader(fr);

                    

                     //创建FileWriter对象

                     FileWriter fw=new FileWriter("e:\\hsp1.txt");

                     bw=new BufferedWriter(fw);

                    

                     //循环读取

                     String s="";

                     while((s=br.readLine())!=null){

                            //输出到磁盘

                            bw.write(s+"\r\n");

                     }

              } catch (Exception e) {

                     e.printStackTrace();

              }finally{

                     try {

                            br.close();

                            bw.close();

                     } catch (Exception e) {

                            e.printStackTrace();

                     }

              }

       }

}

-------------------------------------------------------------------------------

常用io流--打印输出流PrintWriter

打印输出流PrintWriter可以使用print/println及writer方法。但不换行。需在文本内容中加入\r\n通配符才可以做到。

PrintWriter的使用方法与FileReader、FileWriter/BufferedReader、BufferedWriter基本相同

 

记事本实例[Io07.java]

/**

 * 我的记事本(界面+功能)

 */

import java.awt.*;

import javax.swing.*;

import java.io.*;

import java.awt.event.*;

public class Io07 extends JFrame implements ActionListener{

    //定义组件

    JTextArea jta=null;//文本框

    //菜单条

    JMenuBar jmb=null;

    //定义第一个JMenu

    JMenu jm1=null;

    //定义JMenuItem

    JMenuItem jmi1=null;

    JMenuItem jmi2=null;

    JMenuItem jmi3=null;

   

    public static void main(String[] args) {

        Io07 io=new Io07();

    }

    //构造函数

    public Io07(){

        //创建组件

        jta=new JTextArea();

        jmb=new JMenuBar();

        jm1=new JMenu("文件(F)");

        //设置助记符

        jm1.setMnemonic('F');

        jmi1=new JMenuItem("打开(O)");

        //open打开注册监听

        jmi1.addActionListener(this);

        jmi1.setActionCommand("open");

       

        jmi2=new JMenuItem("保存(S)");

        //save保存注册监听

        jmi2.addActionListener(this);

        jmi2.setActionCommand("save");

       

        jmi3=new JMenuItem("退出(X)");

        //exit退出注册监听

        jmi3.addActionListener(this);

        jmi3.setActionCommand("exit");

       

        //加入到菜单

        this.setJMenuBar(jmb);

        //把jm1放到jmb

        jmb.add(jm1);

        //把 jmi1放入jm1

        jm1.add(jmi1);

        jm1.add(jmi2);

        jm1.add(jmi3);

       

        //设置界面管理器(默认BorderLayout边界布局管理器)

       

        //加入组件

        this.add(jta);

       

        //设置JFrame面板

        this.setTitle("记事本界面与功能");

        this.setSize(500, 400);

        this.setLocationRelativeTo(null);

        this.setVisible(true);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

   

    public void actionPerformed(ActionEvent e) {

        //判断"打开"菜单被选中

        if(e.getActionCommand().equals("open")){

            /**

             * 隆重推荐JFileChooser组件

             */

            //创建一个文件选择组件

            JFileChooser jfc=new JFileChooser();

            //设置名字

            jfc.setDialogTitle("请选择要打开的文件...");

            //使用默认方式

            jfc.showOpenDialog(null);

            //显示

            jfc.setVisible(true);

           

            //得到用户选择的文件全(绝对)路径

            String filename=jfc.getSelectedFile().getAbsolutePath();

           

            FileReader fr=null;

            BufferedReader br=null;

            try {

                fr=new FileReader(filename);

                br=new BufferedReader(fr);

                //从文件中读取信息并显示到jta(JTextArea)中

                String s="";

                String allCon="";

                while((s=br.readLine())!=null){

                    allCon+=s+"\r\n";//"\r\n"显示文本时将文件中原有的格式显示到jta中

                }

                //放置到jta即可

                jta.setText(allCon);

            } catch (Exception e2) {

                e2.printStackTrace();

            }finally{

                try {

                    br.close();

                    fr.close();

                } catch (Exception e1) {

                    e1.printStackTrace();

                }

            }//判断"保存"菜单被选中

        }else if(e.getActionCommand().equals("save")){

            //创建保存对话框

            JFileChooser jfc=new JFileChooser();

            //设置名字

            jfc.setDialogTitle("将文件保存到...");

            //使用默认方式

            jfc.showSaveDialog(null);

            //显示

            jfc.setVisible(true);

           

            //得到用户希望把文件保存到何处,文件全路径

            String file=jfc.getSelectedFile().getAbsolutePath();

           

            //准备写入到指定文件

            FileWriter fw=null;

            BufferedWriter bw=null;

            try {

                fw=new FileWriter(file);

                bw=new BufferedWriter(fw);

                //将JtextArea中的内容输出到指定文件中

                bw.write(this.jta.getText());

            } catch (Exception e2) {

                e2.printStackTrace();

            }finally{

                try {

                    bw.close();

                    fw.close();

                } catch (Exception e1) {

                    e1.printStackTrace();

                }

            }

           

        }else if(e.getActionCommand().equals("exit")){

            System.exit(0);

        }

    }

}

-------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值