IO:输入流InputStream 输出流:OutputStream

文件:硬盘上的文件 txt  docx 电影 图片
本章的核心:通过IO来操作文件


File

package IOProject;

import java.io.File;
import java.io.IOException;

public class Demo01 {
    public static void main(String[] args) {
        //file可以代表一个不存在的文件
//        File file = new File("F:/JavaSE/abc.txt");
        File file = new File("hello.txt");
        System.out.println("文件分隔符:"+File.separator);
        boolean flag = file.exists();

        System.out.println(file.isFile() == true ? "是文件" : "其他类型");
        System.out.println("绝对路径--" + file.getAbsoluteFile());
        System.out.println("相对路径--" + file.getPath());
        System.out.println("文件名字--" + file.getName());
        System.out.println("文件长度--" + file.length());

        try {
            if (flag) {
                //file.delete();
                //彻底删除(不经过回收站)
               // System.out.println("删除成功");
            } else {
                file.createNewFile();
                System.out.println("创建成功");
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

相对路径/绝对路径:

  • 如果FIle("绝对路径"):getPath() 和getAbsolutePath()的结果一致,打印的都是绝对路径
  • 如果FIle("相对路径"):getPath() 打印相对路径;getAbsolutePath()打印绝对路径

 

IO:输入流InputStream   输出流:OutputStream

 

 

 

流:是一种FIFO的数据结构(First  In  First  Out)

分类:

  IO:输入流InputStream   输出流:OutputStream

 

说明:

  ①字节流就是 将内容转为了字节形式进行传输, 1 字节 ->8二进制 ,二进制可以传输任何类型的数据,因此字节流也可以传输任何类型的数据。

  ②字节流是8位通用字节流(   1 字节 ->8二进制 ) (字节流可以处理任何类型,处理文本文件以外的其他文件) ;字符流是16位的unicode字符流 (只用于处理字符,处理文本文件)


  ③在while循环中 分批次传输时,字节流使用的缓冲区是 byte[],字符流使用的缓冲区是 char[]


 

输入

package IOProject;


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class InputStreamDemo {
    public static void main(String[] args) throws IOException {
        InputStream in = null;
        try {

            in = new FileInputStream(new File("F:/JavaSE/cesi/abc.txt"));
//            InputStream in = new FileInputStream("F:/JavaSE/abc.txt");
            System.out.println("流的长度:"+in.available());
            byte[] buf = new byte[in.available()];
            in.read(buf);//将文件abc.txt内容读取到buf中
            //buf:byte[] - >String
            System.out.println(new String(buf));
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            in.close();
        }
    }
}

输出

package IOProject;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class OutputStreamDemo {
    public static void main(String[] args) throws IOException {
        OutputStream out = null;
        try {
            out = new FileOutputStream("F:/JavaSE/cesi/xyz.txt");
            out.write("helloworld".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            out.close();
        }
    }
}

文件复制

package IOProject;

import java.io.*;

public class FileCopy {
    public static void main(String[] args) {
        InputStream in = null;
        OutputStream out = null;
        try {
            in = new FileInputStream("F:/JavaSE/笔记/异常.png");
            out = new FileOutputStream("F:/JavaSE/cesi/异常图片.jpg");
            //abc.txt->内存->xyz.txt
            byte[] buf = new byte[10];
            int len = -1;
            while ((len = in.read(buf)) != -1) {
                out.write(buf,0,len);

            }
            System.out.println("copy成功");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) out.close();
                if (in != null) in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}

写读文件末尾位置过程

IO:输入流InputStream   输出流:OutputStream

 

使用字符流进行文件的复制

package IOProject;

import java.io.*;

public class FileCopyCharactor {
    public static void main(String[] args) {
        //1.文件->内存(Reader)

        Reader reader = null;
        Writer writer = null;
        try {
            reader = new FileReader("F:/JavaSE/cesi/个人介绍.txt");
            writer = new FileWriter("F:/JavaSE/cesi/个人完整介绍.txt");
            char[] buf = new char[4];
            int len = -1;
            StringBuffer sb = new StringBuffer();
            while ((len = reader.read(buf)) != -1) {
                sb.append(buf, 0, len);
            }
            System.out.println(sb);
            //2.在内存中  替换占位符

            String content = sb.toString();
            content = content.replace("{name}", "张三")
                    .replace("{enterprise}", "xm")
                    .replace("{weixin}", "123321");
            //3.将替换后的内容  输出到文件 ,内存->文件(Writer)
            writer.write(content);
            System.out.println("输出成功");

            writer.flush();//将管道中的数据 刷出到  文件中

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (writer != null) writer.close();
                if (reader != null)reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

上一篇:下载网站上的付费资源-java代码


下一篇:初识Socket