zoukankan      html  css  js  c++  java
  • 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()+"				"+
                        new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified()))+"			"+
                        (result[i].isDirectory()?"文件夹":"文件")+"		"+
                        (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 = "你吃饭了吗
    ";
            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);
            }
  • 相关阅读:
    【bzoj4276】[ONTAK2015]Bajtman i Okrągły Robin 线段树优化建图+费用流
    【bzoj4383】[POI2015]Pustynia 线段树优化建图+差分约束系统+拓扑排序
    【bzoj4519】[Cqoi2016]不同的最小割 分治+最小割
    【bzoj2229】[Zjoi2011]最小割 分治+网络流最小割
    【bzoj3689】异或之 可持久化Trie树+堆
    【bzoj1109】[POI2007]堆积木Klo 动态规划+树状数组
    【bzoj2780】[Spoj]8093 Sevenk Love Oimaster 广义后缀自动机
    【bzoj4804】欧拉心算 欧拉函数
    【bzoj3231】[Sdoi2008]递归数列 矩阵乘法+快速幂
    【bzoj3589】动态树 树链剖分+线段树
  • 原文地址:https://www.cnblogs.com/cathycheng/p/13215106.html
Copyright © 2011-2022 走看看