java学习日记 java IO

一、操作文件的类——File

1、创建新文件

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

public class FileDemo1 {
    public static void main(String[] args) {
        File file = new File("D:\\test.txt");
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2、删除文件

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

public class FileDemo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\test.txt");
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (file.exists()){
            file.delete();
        }else {
            file.createNewFile();
        }
    }
}

3、File中的separator,表示分隔符。

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

public class FileDemo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("d:"+File.separator+"test.txt");
        file.createNewFile();
    }
}

4、新建文件夹,在文件夹下新建文件。

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

public class FileDemo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("d:"+File.separator+"demo"+File.separator+"test.txt");
        if (!file.getParentFile().exists()){
            file.getParentFile().mkdir();
        }
        if (file.exists()){
            file.delete();
        }else {
            System.out.println(file.createNewFile());
        }
    }
}

5、列出指定目录的全部文件

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

public class FileDemo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("d:"+File.separator);
        String [] str = file.list();
        for (String i:str){
            System.out.println(i);
        }
    }
}

6、模拟资源管理器列出目录中的全部内容

public class FileDemo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("d:"+File.separator);
        File [] result = file.listFiles();
        BigDecimal b1 = new BigDecimal((double) file.length()/1024/1024);

        for (int i = 0;i<result.length;i++){
            System.out.println(result[i].getName()+"\t\t\t\t"+
                    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified()))+"\t\t\t"+
                    (result[i].isDirectory()?"文件夹":"文件")+"\t\t"+
                    (result[i].isFile()?b1.divide(b1,2,BigDecimal.ROUND_HALF_UP):""));
        }
    }
}

 

 二、字节流与字符流基本操作

 

 1、字节输出流(OutputStream)

文件内容的输出(采用字符数组):

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class OutputStreamDemo1 {
    public static void main(String[] args) throws Exception {
        //1、定义输出文件的路径
        File file = new File("d:"+File.separator+"demo"+File.separator+"test.txt");
        if (!(file.getParentFile().exists())){  //文件目录不存在
            file.getParentFile().mkdir();  //创建目录
        }
        //2、使用Outputstream与其子类进行对象的实例化,此时目录存在,文件不存在。
        OutputStream outputStream = new FileOutputStream(file);
        //3、进行文件内容的输出
        String str = "hello world";
        outputStream.write(str.getBytes());  //将字符串变为字符数组
        //4、资源操作后一定要进行关闭
        outputStream.close();
    }
}

采用单个字节的输出:

public class OutputStreamDemo1 {
    public static void main(String[] args) throws Exception {
        //1、定义输出文件的路径
        File file = new File("d:"+File.separator+"demo"+File.separator+"test.txt");
        if (!(file.getParentFile().exists())){  //文件目录不存在
            file.getParentFile().mkdir();  //创建目录
        }
        //2、使用Outputstream与其子类进行对象的实例化,此时目录存在,文件不存在。
        OutputStream outputStream = new FileOutputStream(file);
        //3、进行文件内容的输出
        String str = "welp";
        byte [] bytes = str.getBytes();
        for (byte x:bytes){
            outputStream.write(x);
        }
        //4、资源操作后一定要进行关闭
        outputStream.close();
    }
}

输出部分字节数组:

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class OutputStreamDemo1 {
    public static void main(String[] args) throws Exception {
        //1、定义输出文件的路径
        File file = new File("d:"+File.separator+"demo"+File.separator+"test.txt");
        if (!(file.getParentFile().exists())){  //文件目录不存在
            file.getParentFile().mkdir();  //创建目录
        }
        //2、使用Outputstream与其子类进行对象的实例化,此时目录存在,文件不存在。
        OutputStream outputStream = new FileOutputStream(file);
        //3、进行文件内容的输出
        String str = "你吃饭了吗";
        byte [] bytes = str.getBytes();
        outputStream.write(bytes,0,bytes.length);
        //4、资源操作后一定要进行关闭
        outputStream.close();
    }
}

追加新内容:

public class OutputStreamDemo1 {
    public static void main(String[] args) throws Exception {
        //1、定义输出文件的路径
        File file = new File("d:"+File.separator+"demo"+File.separator+"test.txt");
        if (!(file.getParentFile().exists())){  //文件目录不存在
            file.getParentFile().mkdir();  //创建目录
        }
        //2、使用Outputstream与其子类进行对象的实例化,此时目录存在,文件不存在。
        OutputStream outputStream = new FileOutputStream(file,true);
        //3、进行文件内容的输出
        String str = "你吃饭了吗\r\n";
        byte [] bytes = str.getBytes();
        outputStream.write(bytes,3,9);
        //4、资源操作后一定要进行关闭
        outputStream.close();
    }
}

2、字节输入流(InputStream)

从文件中读取内容:

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

public class InputStreamDemo1 {
    public static void main(String[] args)throws Exception {
        //1、定义要输入文件的路径
        File file = new File("d:"+File.separator+"demo"+File.separator+"test.txt");
        //需要判断文件是否存在后,才可以进行读取
        if (file.exists()){
            //2、使用InputStream读取
            InputStream inputStream = new FileInputStream(file);
            //3、进行数据读取
            byte [] bytes = new byte[1024];
            int len = inputStream.read(bytes);
            //4、关闭输入流
            inputStream.close();
            System.out.println("["+new String(bytes,0,len)+"]");
        }
    }
}

单个字节数据取出:(重点)

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

public class InputStreamDemo1 {
    public static void main(String[] args)throws Exception {
        //1、定义要输入文件的路径
        File file = new File("d:"+File.separator+"demo"+File.separator+"test.txt");
        //需要判断文件是否存在后,才可以进行读取
        if (file.exists()){
            //2、使用InputStream读取
            InputStream inputStream = new FileInputStream(file);
            //3、进行数据读取
            byte [] bytes = new byte[1024];
            int foot = 0;
            int temp = 0;
            while ((temp = inputStream.read())!=-1){
                bytes[foot++] = (byte) temp;
            }
            //4、关闭输入流
            inputStream.close();
            System.out.println("["+new String(bytes,0,foot)+"]");
        }
    }
}

3、字符输出流(Writer)

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class WriterDemo1 {
    public static void main(String[] args) throws Exception {
        //定义要输入文件的路径
        File file = new File("d:"+File.separator+"demo"+File.separator+"test.txt");
        if (!file.getParentFile().exists()){
            file.mkdir();
        }
        //通过子类实例化父类对象
        Writer writer = new FileWriter(file);
        //进行写操作
        String str = "hello world";
        writer.write(str);
        //关闭输出流
        writer.close();
    }
}

4、字符输入流(Reader)

import java.io.File;
import java.io.FileReader;
import java.io.Reader;

public class ReaderDemo1 {
    public static void main(String[] args) throws Exception {
        File file = new File("d:"+File.separator+"demo"+File.separator+"test.txt");
        Reader reader = new FileReader(file);
        int foot = 0;
        int temp = 0;
        char [] chars = new char[1024];
        while ((temp=reader.read())!=-1){
            chars[foot++]= (char) temp;
        }
        reader.close();
        System.out.println("["+new String(chars,0,foot)+"]");
    }
}

5、字节流和字符流的区别?

字节流直接与终端进行数据交互,字符流需要将数据先进入缓冲区。

字节流不关闭输出流,缓冲区的数据将不会被强制清空,除非使用flush。

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class WriterDemo1 {
    public static void main(String[] args) throws Exception {
        //定义要输入文件的路径
        File file = new File("d:"+File.separator+"demo"+File.separator+"test.txt");
        if (!file.getParentFile().exists()){
            file.mkdir();
        }
        //通过子类实例化父类对象
        Writer writer = new FileWriter(file);
        //进行写操作
        String str = "hello world";
        writer.write(str);
        writer.flush();

    }
}

6、转换流OuputStreamWriter类  与  InputStreamReader类

import java.io.*;

public class OutputStreamWriterDemo1 {
    public static void main(String[] args) throws Exception {
        File file = new File("d:"+File.separator+"demo"+File.separator+"test.txt");
        if (!file.getParentFile().exists()){
            file.mkdir();
        }
        OutputStream output = new FileOutputStream(file,true);
        //将OutputStream对象传递给OutputStreamWriter类的构造方法,而后向上转型为Writer
        OutputStreamWriter out = new OutputStreamWriter(output);
        Writer writer = (Writer)out;
        out.write("Hello world!!!");
        writer.flush();
        writer.close();
    }
}

7、文件复制

public class CopyDemo1 {
    public static void main(String[] args) throws Exception{
        if (args.length!=2){
            System.out.println("输入的参数不正确");
            System.out.println("例如:java Copy 源文件路径 目标文件路径");
            System.exit(1);
        }
        File file = new File(args[0]);
        File file1 = new File(args[1]);
        if (!file.exists()){
            System.out.println("源文件不存在");
            System.exit(1);
        }
        if (!file1.getParentFile().exists()){
            file1.getParentFile().mkdir();
        }
        InputStream input = null;
        OutputStream out = null;
        input = new FileInputStream(file);
        out = new FileOutputStream(file1);
        if (input!=null&&out!=null){
            int temp = 0;
            while ((temp=input.read())!=-1){
                out.write(temp);
            }
            System.out.println("复制完成");
        }
        input.close();
        out.close();
    }
}

 

 

 

先运行一次程序,可以初始化参数。

拷贝的优化:

        int temp = 0; //保存每次读取的个数
        byte [] data = new byte[1024];
        while ((temp=input.read(data))!=-1){
            out.write(data,0,temp);
        }

 

posted @ 2020-06-30 17:50  橘子酱ing  阅读(145)  评论(0编辑  收藏  举报