Java 文件IO操作基础,File,FileInputStream,FileOutputStream

什么是文件

有个时候我们程序中的数据不会直接保存,一旦程序断电,数据将不会存在,如果我们想要我们程序中的数据永久的保存起来,所以,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目录下。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值