什么是文件

有个时候我们程序中的数据不会直接保存,一旦程序断电,数据将不会存在,如果我们想要我们程序中的数据永久的保存起来,所以,java的文件io显得非常重要。
什么是文件流

创建文件
如下相关的文件io方法

new File(String pathName) 根据目录创建一个文件
如下代码
import java.io.File;
public class Main {
    public static void main(String[] args) {
//        方法1 使用 new file(string name)创建一个文件
        String filePath="/home/windstorm/javafile.txt";
        File file = new File(filePath);
        try {
            file.createNewFile();
            System.out.println("文件创建成功");
        }catch (Exception e)
        {
            System.out.println("创建失败");
        }
    }
} 
执行效果如下

文件也成功的创建在我的家目录

new File(String parent,String child)根据父目录创建一个子文件
如下代码
import java.io.File;
public class Main {
    public static void main(String[] args) {
        String childPath="javafile2.txt";
        String parenPath="/home/windstorm/";
        File file = new File(parenPath,childPath);
        try {
            file.createNewFile();
            System.out.println("文件创建成功");
        }catch (Exception e)
        {
            System.out.println("创建失败");
        }
    }
} 
执行效果

执行结果

new File(File parentName,childPath)创建一个根据父目录文件和子路径创建一个文件
import java.io.File;
public class Main {
    public static void main(String[] args) {
        String childPath="javafile3.txt";
        String parenPath="/home/windstorm/";
//        得到父目录的路径
        File parentFile=new File(parenPath);
//        得到file
        File file = new File(parentFile,childPath);
        try {
//            执行这一步才会真正的写入文件到磁盘
            file.createNewFile();
            System.out.println("文件创建成功");
        }catch (Exception e)
        {
            System.out.println("创建失败");
        }
    }
} 
运行效果

执行效果

删除文件
使用delete方法可以删除文件或者目录
如下代码删除
/home/windstorm/javafile1.txt文件

import java.io.File;
public class Main {
    public static void main(String[] args) {
//      填写要删除的文件路径
        File file = new File("/home/windstorm/javafile1.txt");
//    判断文件是否存在
        if (file.exists())
        {
//            删除
            try {
                file.delete();
                System.out.println("删除成功");
            }catch (Exception e)
            {
            }
        }
    }
} 
运行效果如下

文件成功删除
delete也可以删除目录
创建如下目录
/home/windstorm/javafiles

执行如下代码
import java.io.File;
public class Main {
    public static void main(String[] args) {
//      填写要删除的文件路径
        File file = new File("/home/windstorm/javafiles/");
//    判断文件是否存在
        if (file.exists())
        {
//            删除
            try {
                file.delete();
                System.out.println("删除成功");
            }catch (Exception e)
            {
            }
        }
    }
} 
执行效果如下

目录删除成功
获取文件相关信息
在java在可以获取如下信息

如下程序获取/home/windstorm/javafile1.txt 的文件信息
import java.io.File;
public class Main {
    public static void main(String[] args) {
        File file = new File("/home/windstorm/javafile1.txt");
//        得到文件的名字
        System.out.println(file.getName());
//        得到绝对路径
        System.out.println(file.getAbsolutePath());
//        得到父目录
        System.out.println(file.getParent());
//        得到文件的长度
        System.out.println(file.length());
//        文件是否存在
        System.out.println(file.isFile());
//        目录是否存在
        System.out.println(file.isDirectory());
    }
} 
执行结果如下

操作目录
对于目录的操作,有如下方法.

如下程序
import java.io.File;
public class Main {
    public static void main(String[] args) {
        File file = new File("/home/windstorm/JavaFiles");
//        如果JavaFile没有操作,就创建一个这样的目录
        file.mkdir();
    }
} 
运行效果如下

成功的在/home/windstorm/创建了一个JavaFiles的目录
mkdirs的效果可以创建多个目录
代码如下
import java.io.File;
public class Main {
    public static void main(String[] args) {
        File file = new File("/home/windstorm/JavaFiles/files");
//        如果JavaFile/files没有操作,就创建一个这样的目录
        file.mkdirs();
    }
} 
运行效果如下

使用mkdirs可以创建含有子目录的目录.
IO流
IO(Input Output)流就是输入输出流。
从外部设备读取数据到内存中就叫做输入流。
从内存中将数据输出到外部设备就叫做输出流。
流的分类

FileInputStream使用
FileInputStream.read()读取一个字符
案例
读取目录/home/windstorm/data.txt 中的数据到java程序中。

首先读取一个字符
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
public class Main {
    public static void main(String[] args) {
        new Main().readFile();
        }
        public void readFile() {
        String filePath="/home/windstorm/data.txt";
        int data;
        try {
//            创建一个文件输入流,用于读取文件
            FileInputStream fileInputStream = new FileInputStream(filePath);
//            读取一个字节,如果没有数据,返回-1
            data = fileInputStream.read();
//            得到输出结果
            System.out.println("Read date is ::"+(char)data);
        }catch (IOException e)
        {
            System.out.println("Read file failed");
        }
    }
} 
全部读取
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
public class Main {
    public static void main(String[] args) {
        new Main().readFile();
        }
        public void readFile() {
        String filePath="/home/windstorm/data.txt";
        int data;
        try {
//            创建一个文件输入流,用于读取文件
            FileInputStream fileInputStream = new FileInputStream(filePath);
//            读取一个字节,如果没有数据,返回-1
            data = fileInputStream.read();
            while (data!=-1)
            {
//            得到输出结果
                System.out.println("Read date is ::"+(char)data);
                data=fileInputStream.read();
            }
        }catch (IOException e)
        {
            System.out.println("Read file failed");
        }
    }
} 
FileInputStream.read(buf) 读取n个字节到buf中
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
public class Main {
    public static void main(String[] args) {
        new Main().readFile();
        }
        public void readFile() {
        String filePath="/home/windstorm/data.txt";
//        使用字符数组的方式读取字符
        byte [] buf = new byte [4];
        int readLenth;
        try {
//            创建一个文件输入流,用于读取文件
            FileInputStream fileInputStream = new FileInputStream(filePath);
//            读取4个字符到buf中,返回读取字符的个数
            readLenth=fileInputStream.read(buf);
//            转成字符串输出
            System.out.println(new String(buf,0,readLenth));
            
//            通常这种读取方式的效率比较高 
        }catch (IOException e)
        {
            System.out.println("Read file failed");
        }
    }
} 
全部读取
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;
public class Main {
    public static void main(String[] args) {
        new Main().readFile();
        }
        public void readFile() {
        String filePath="/home/windstorm/data.txt";
//        使用字符数组的方式读取字符
        byte [] buf = new byte [4];
        int readLenth;
        try {
//            创建一个文件输入流,用于读取文件
            FileInputStream fileInputStream = new FileInputStream(filePath);
            //            读取4个字符到buf中,返回读取字符的个数
            readLenth=fileInputStream.read(buf);
            while (readLenth!=-1)
            {
//            转成字符串输出
                System.out.println(new String(buf,0,readLenth));
                readLenth=fileInputStream.read(buf);
            }
//            通常这种读取方式的效率比较高
        }catch (IOException e)
        {
            System.out.println("Read file failed");
        }
    }
} 
FileOutputStream的使用
FileOutputStream.write() 输出一个字符到磁盘
这里输出一个字符到当前目录下
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream("./a.txt");
        fileOutputStream.write('h');
        fileOutputStream.close();
    }
} 
运行结果如下

如下代码输出一个字符串到磁盘。
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream("./a.txt");
        fileOutputStream.write("Good idea".getBytes());
        fileOutputStream.close();
    }
} 
效果如下

将内存数据追加到磁盘
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        //加上true以后表示追加
        FileOutputStream fileOutputStream = new FileOutputStream("./a.txt",true);
        fileOutputStream.write("Good idea".getBytes());
        fileOutputStream.close();
    }
} 
案例:视频拷贝
拷贝/home/windstorm/丝滑火焰流星锤~原创.mp4 到/home/windstorm/Videos/目录下

如下代码
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class Main {
    public static void main(String[] args) throws IOException {
        new Main().VideosCopy("/home/windstorm/丝滑火焰流星锤~原创.mp4","/home/windstorm/Videos/丝滑火焰流星锤.mp4");
    }
    void VideosCopy(String targetPath,String disPath) throws IOException
    {
        FileInputStream inputStream = new FileInputStream(targetPath);
        FileOutputStream fileOutputStream = new FileOutputStream(disPath);
//        每一次读取8个字节到内存
        byte buf [] = new byte[8];
        while ((inputStream.read(buf))!=-1)
        {
            fileOutputStream.write(buf);
            System.out.println("Copied 8 byte ");
        }
        System.out.println("Done");
    }
} 
执行结果如下

成功将视频拷贝到videos目录下。



















