zoukankan      html  css  js  c++  java
  • java基础-IO

     ------------------------------下面我们从File类开始----------------------------------------------

     文件流一般都是File开头的,操作基于文件

     缓冲流都是Buffer开头,操作基于内存

     

     File只能操作文件本身,但不能操作文件内容,就像是类似于可以拿日记本不能写日记。

    这里面记住windows下为\ 因为是转义符,所以\才代表一个

    下面看看File类的常用方法图

    来看一个案例

    先创建一个文件

     

     同样,上面还有很多方法,用到的时候都可以用同样的方式测试一下效果,主要参考上面方法图

    下面来看一个有点用的遍历文件夹的一个案例

    package File;
    
    import java.io.File;
    
    public class  FileDemo {
    
        public void test(File file) {
            if (file.isFile()) {
                System.out.println(file.getAbsolutePath() + "是文件");
            } else {
                System.out.println(file.getAbsolutePath() + "是文件夹");
                //是文件夹就遍历
                File[] files = file.listFiles();  //获取当前文件夹的子文件夹或者文件的file对象
                if (files != null && files.length > 0) {
                    for (File ff : files) {
                        test(ff);//递归
                    }
                }
            }
    
        }
    
    }
    package File;
    
    import java.io.File;
    
    public class test {
        public static void main(String[] args) {
            File f= new File("D:\Temp");
            FileDemo demo = new FileDemo();
            demo.test(f);
        }
    }

    学习完了上面的内容后相信你对文件与io有一点的认识了,同时也好奇怎样可以操作文件的内容呢

    别急,先看一个IO流的总图

    示例:字符流-将用户在控制台中输入的内容保存到文件中

    public static void main(String[] args) throws IOException {
    Scanner scanner = new Scanner(System.in);
    String data = scanner.next();
    FileWriter writer = new FileWriter("f.txt");
    writer.write(data);
    writer.flush();
    writer.close();
    }

    //flush() 是清空,而不是刷新,可以理解为强制把数据输出完毕。

    即清空缓冲区数据,就是说你用读写流的时候,其实数据是制先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,

    因为还有一部知分有可能会留在内存这个缓冲区中。这时候如果你调用了 close()方法关闭了读写流,那么这部分数据就会丢失,

    所以应该在关闭读写流之前先flush(),强制把数据输出.清空数据。即把内存的内容刷写到硬盘

    再来看一个字节流的案例

    package FileInput;
    
    import java.io.FileInputStream;
    
    public class Test {
        public static void main(String[] args) {
            try {
                FileInputStream in = new FileInputStream("D:\Temp\TxGameDownload\aaa.txt");
                byte[]b=new byte[10];
                in.read(b);  
    
                System.out.println(new String(b)); //转化为字符串输出
                in.close();//注意流用完一定要关闭
    
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }

     这里面有一个问题就是数据如果多了不止10个怎么办

    首先需要明白

    /FileInputStream.read方法有一个返回值,返回值是读取的数据的长度如果,读到最后还会往后读一个,这时候就会返回-1
    //所以in.read返回-1即整个文件读取完毕

    所以

    那我们再来一个字符流的案例吧

    public static void main(String[] args) throws IOException {//psvm
        File file = new File("F:\安装GCC.txt");
        FileReader reader = new FileReader(file);
      
        int read = reader.read();   //read() 一次读取一个字符
        System.out.print((char)read);
    
        while(read != -1){
          read = reader.read();
            System.out.print((char)read);
        }
        reader.close();
    }
    

    方式二

    public static void main(String[] args) throws IOException {//psvm
       File file = new File("F:\安装GCC.txt");
       FileReader reader = new FileReader(file);
    
       char[] buf = new char[64];
       int len = reader.read(buf); //将数据读取到buf中,返回读取到的字符的个数
       while(len != -1){
           System.out.println(new String(buf,0,len));
           len = reader.read(buf);//
       }
       reader.close();
    }

     这上面都是输出到控制台

    那再看个案例,输入到文本

    package FileInput;
    
    import java.io.FileOutputStream;
    
    public class Test {
        public static void main(String[] args) {
                try{
                    FileOutputStream out = new FileOutputStream("D:\Temp\TxGameDownload\aaa.txt");
                    String str="dsffsdsfdf";
                    out.write(str.getBytes());
                    out.flush();
                    out.close();
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
    
        }
    }

  • 相关阅读:
    used内存较大,实际top查看系统进程中并没有占用这么多内存
    查看LINUX进程内存占用情况
    关于ConcurrentHashMap的key和value不能为null的深层次原因
    Linux修改用户所在组方法
    原因可能是托管的PInvoke签名与非托管的目标签名不匹配
    vs2019 实现C#调用c++的dll两种方法
    java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结
    java 读取文件的几种方式和通过url获取文件
    Idea中Maven的默认配置 (非常好)
    去哪儿网models数据更新
  • 原文地址:https://www.cnblogs.com/yangj-Blog/p/12966382.html
Copyright © 2011-2022 走看看