I/O输入和输出详解

简介: I/O输入和输出详解

I/O输入和输出

文件的输入和输出是java中很重要的内容,主要是通过数据流来进行,数据流通过获取文件对象,然后对文件进行输入和输出。

1、IO.File测试

public class FileTest {
  public static void main(String[] args) {
    new FileTest().createFile();
    new FileTest().getMessage();
    new FileTest().outputStream();
    new FileTest().inputStream();
  }
  public void createFile(){
    //创建文件对象
    File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
    //判断是否存在该文件名的文件
    if (file.exists()) {
      //删除该文件名的文件
      file.delete();
      System.out.println("文件已经删除");
      //如果不存在就直接创建文件
    }else {
      try{
        //创建文件
        file.createNewFile();
        System.out.println("文件已经创建");
      }catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
  //获取某个文件的相关信息
  public void getMessage(){
    File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
    if (file.exists()) {
      //获取文件名字
      String  name=file.getName();
      //获取文件长度
      long length=file.length();
      //文件是否隐藏的
      boolean hidden=file.isHidden();
      //文件是否可读
      boolean read=file.canRead();
      //文件是否可写
      boolean writer=file.canWrite();
      //获取文件绝对路径
      String absolutePath=file.getAbsolutePath();
      //获取文件父路径
      String parent=file.getParent();
      //判断该路径文件是否是文件类型
      boolean isfile=file.isFile();
      //判断路径文件是否为目录
      boolean isdirectory=file.isDirectory();
      //获取文件最后一次修改时间
      long lasttime=file.lastModified();
      //转换一下时间格式
      java.util.Date date=new java.util.Date(lasttime);
      System.out.println("文件名称是:"+name);
      System.out.println("文件长度是:"+length);
      System.out.println("该文件是隐藏文件吗?"+hidden);
      System.out.println("该文件是可读文件吗?"+read);
      System.out.println("该文件是可写文件吗?"+writer);
      System.out.println("文件的绝对路径是:"+absolutePath);
      System.out.println("文件的父路径是:"+parent);
      System.out.println("该文件是一个文件吗?"+isfile);
      System.out.println("该文件是一个目录吗?"+isdirectory);
      System.out.println("该文件最后修改时间为:"+date);
    }else {
      System.out.println("文件不存在");
    }
  }
  //获取输出流
  public void outputStream(){
    //创建输出文件对象
    File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
    try {
      //将文件对象加入到输出流中
      FileOutputStream fileOutputStream=new FileOutputStream(file);
      //获取输出内容(以字符串数组存储
      byte buy[]="星光不问赶路人,岁月不负有心人".getBytes();
      //将字符数组中的内容输出到文件对象
      fileOutputStream.write(buy);
      System.out.println("输出完成");
      //关闭输出流
      fileOutputStream.close();
    } catch (Exception e) {
      System.out.println("文件异常");
    }
  }
  //获取输入流
  public void inputStream(){
    //获取文件对象
    File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
    try {
      //将文件对象加入到输入流中
      FileInputStream fileInputStream=new FileInputStream(file);
      //创建字符数组(准备用来存储字符数据
      byte[] bs=new byte[1024];
      //获取读取流读取字符长度
      int len=fileInputStream.read(bs);
      //输出字符
      System.out.println("文件中的信息是:"+new String(bs,0,len));
      //关闭输入流
      fileInputStream.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

运行截图:

76da2ae7dc284cb8b459ce4d15e07642.png

2、利用JFram来写入文件数据和获取文件数据

public class FileReaderAndFileWriterTest extends JFrame{
  //控制文本域
  private JScrollPane scrollPane;
  private static final long serialVersionUID=1L;
  //创建内容面板对象
  private JPanel jContentPane=null;
  //创建文本域对象
  private JTextArea jTextArea=null;
  //创建控制面板
  private JPanel controlPane=null;
  //创建按钮对象
  private JButton openButton=null;
  private JButton closeButton=null;
  //构造器
  public FileReaderAndFileWriterTest(){
    super();
    //初始化面板
    initialize();
  }
  //设置写入文件按钮
  private JButton getOpenButton(){
    //判断按钮是否为null
    if (openButton==null) {
      //创建按钮对象
      openButton=new JButton();
      //设置按钮的提示信息
      openButton.setText("写入文件");
      openButton.addActionListener(new ActionListener() {
        //按钮的单击事件
        @Override
        public void actionPerformed(ActionEvent e) {
          //创建文件对象
          File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\ReaderAndWriter.txt");
          try{
            //创建FileWriter对象,用于输出数据
            FileWriter out=new FileWriter(file);
            //获取文本域中文件
            String string=jTextArea.getText();
            //将信息写入磁盘文件
            out.write(string);
            //关闭输出流
            out.close();
          }catch (Exception e1) {
            e1.printStackTrace();
          }
        }
      });
      //调试异常
    }else {
      System.out.println("不能输出数据");
    }
    return openButton;
  }
  //设置读取文件按钮
  private JButton getCloseButton(){
    //判断按钮式是否为空
    if (closeButton==null) {
      //创建按钮对象
      closeButton=new JButton();
      //设置提示信息
      closeButton.setText("读取文件");
      //按钮的单击事件
      closeButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
          //创建文件对象
          File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\ReaderAndWriter.txt");
          try{
            //创建输入文件流
            FileReader fileReader=new FileReader(file);
            //创建一个char数组,用来存储读入的数据
            char byt[] =new char[1024];
            //读取数据然后返回将读取的数据
            int len=fileReader.read(byt);
            //将数据写入到文本域中
            jTextArea.setText(new String(byt, 0, len));
            //关闭读入流
            fileReader.close();
          }catch (Exception e1) {
            e1.printStackTrace();
          }
        }
      });
    }
    else {
      System.out.println("不能读入数据");
    }
    return closeButton;
  }
  //初始化容器
  private void initialize(){
    //设置模板大小
    this.setSize(300,200);
    //将面板加入
    this.setContentPane(getJContentPane());
    //创建容器标题
    this.setTitle("JFrame");
  }
  //获取文本域
  private JTextArea getJTextArea(){
    if (jTextArea==null) {
      //创建一个文本域
      jTextArea=new JTextArea();
    }
    return jTextArea;
  }
  private JPanel getControlPanel(){
    if (controlPane==null) {
      //设置控制模板的布局
      FlowLayout flowLayout=new FlowLayout();
      flowLayout.setVgap(1);
      //创建面板
      controlPane=new JPanel();
      controlPane.setLayout(flowLayout);
      controlPane.add(getOpenButton(),null);
      controlPane.add(getCloseButton(),null);
    }
    return controlPane;
  }
  private JPanel getJContentPane(){
    if (jContentPane==null) {
      //创建一个新的模板
      jContentPane=new JPanel();
      //设置模板的布局格式
      jContentPane.setLayout(new BorderLayout());
      //将scrollPane模板设置在中间
      jContentPane.add(getScrollPane(),BorderLayout.CENTER);
      //将控制模板放在南边
      jContentPane.add(getControlPanel(),BorderLayout.SOUTH);
    }
    else {
      System.out.println("你的模板有问题");
    }
    return jContentPane;
  }
  //主方法
  public static void main(String[] args) {
    //创建对象
    FileReaderAndFileWriterTest readerAndWriterTest=new FileReaderAndFileWriterTest();
    readerAndWriterTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    readerAndWriterTest.setVisible(true);
  }
  //创建可变的文本域
  protected JScrollPane getScrollPane(){
    if (scrollPane==null) {
      scrollPane=new JScrollPane();
      scrollPane.setViewportView(getJTextArea());
    }
    return scrollPane;
  }
}

运行截图:

79a67560c1c44d51b99c48df4e2eb43c.png

注意:一次运行只能读取或者写入一次,后面都是一样的文件内容了,你可以开运行两次,获取两个框,一个进行写入,另一个进行读取就行。

3、利用缓冲区来读写文件

public class BufferedReaderAndBufferedWriter {
  public static void main(String[] args) {
    //设置内容数组
    String[] contents={"须知少年拿云志,曾许人间第一流。","总有人间一两风,填我十万八千梦。","心若有所向往,何惧道阻且长。"};
    //创建文件对象
    File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\BufferedReaderAndBufferedWriter.txt");
    try{
      //创建FileWriter对象
      FileWriter fileWriter=new FileWriter(file);
      //创建BufferWriter对象,并且将FileWriter对象加入BufferWriter
      BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
      //遍历数组
      for(int i=0;i<contents.length;i++){
        //将内容输出
        bufferedWriter.write(contents[i]);
        //将数组中单个元素的以单行的形式写入文件
        bufferedWriter.newLine();
      }
      //关闭输出流和输入流的时候,先开后关,后开先关
      //关闭BufferWriter对象
      bufferedWriter.close();
      //关闭FileWriter对象
      fileWriter.close();
    }catch (Exception e) {
      e.printStackTrace();
    }
    try{
      //创建FileReader对象
      FileReader fileReader=new FileReader(file);
      //创建BufferedReader对象并且将FielReader对象加入到BufferedReader对象中
      BufferedReader bufferedReader=new BufferedReader(fileReader);
      //创建一个空字符串
      String string=null;
      //创建i并且赋值为0
      int i=0;
      //while循环按行读取文件中的值
      while((string=bufferedReader.readLine())!=null){
        i++;
        //在控制台输出读取的数据
        System.out.println("第"+i+"行:"+string);
      }
      //规则同上
      //关闭BufferedReader对象
      bufferedReader.close();
      //关闭FileReader对象
      fileReader.close();
    }catch (Exception e) {
      e.printStackTrace();
    }
  }
}

运行截图:

99f76f772c83476781d289460248d472.png

4、利用数据输入流和输出流进行文件读取和内容输出

public class DataInputStreamAndDataOutputStream {
  public static void main(String[] args) {
    try{
      //创建文件对象
      File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\DataInputStreamAndDataOutputStream.txt");
      //创建FileOutputStream对象,并且将文件对象加入
      FileOutputStream fileOutputStream=new FileOutputStream(file);
      //创建DataOutputStream对象,并且将FileOutputStream加入DataOutputStream对象
      DataOutputStream dataOutputStream=new DataOutputStream(fileOutputStream);
      //将数据按UTF格式写入文件中
      dataOutputStream.writeUTF("使用writeUTF方法写入数据");
      //将数据按Char格式写入文件中
      dataOutputStream.writeChars("使用writeChars方法写入数据");
      //将数据按Byte格式写入文件中
      dataOutputStream.writeBytes("使用writesBytes方法写入数据");
      //关闭输出流
      dataOutputStream.close();
      //创建文件输出流对象,并且将文件对象加入到文件输出流对象中
      FileInputStream fileInputStream=new FileInputStream(file);
      //创建DataInputStream对象,并且将文件输出流对象加入
      DataInputStream dataInputStream=new DataInputStream(fileInputStream);
      //控制台输出按照UTF格式读取的数据
      System.out.println(dataInputStream.readUTF());
      //控制台输出按照Char格式读取的数据
      System.out.println(dataInputStream.readChar());
      //控制台输出按照Byte格式读取的数据
      System.out.println(dataInputStream.readByte());
      //关闭DataInputStream输入流
      dataInputStream.close();
      //关闭文件输入流
      fileInputStream.close();
    }catch (Exception e) {
      e.printStackTrace();
    }
  }
}

运行截图:

3d16d3c3606742f9badebc2c5da32369.png

注意:大家发现输出不对劲是正常的,因为用非UTF-8格式存储和读取数据是会乱码的·。

相关文章
|
2月前
|
存储 C++
C++系列五:输入/输出
C++系列五:输入/输出
|
7月前
射极输出器
射极输出器(Emitter Follower)是一种常见的放大电路,也称为共射输出器。它由一个晶体管组成,通常是NPN型晶体管。
158 0
|
2月前
|
C++
58C++的输入和输出
58C++的输入和输出
10 0
|
2月前
|
C语言
输入&输出
【2月更文挑战第13天】输入&输出。
12 1
|
3月前
|
编译器 C++
【c++】C++输入&输出
【c++】C++输入&输出
【c++】C++输入&输出
|
7月前
|
编译器 C语言
C 输入 & 输出
C 输入 & 输出。
75 1
|
9月前
|
C++
|
存储 程序员 C++
C++ 中的基本输入/输出
C++ 附带的库为我们提供了许多执行输入和输出的方法。在 C++ 中,输入和输出以字节序列或更通常称为流的形式执行。
102 0
|
Java 编译器 C#
C#的简单理解与输出
C#的简单理解与输出
96 0