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();
            }

    }
}

 

 

posted @ 2020-05-26 16:29  To_Yang  阅读(215)  评论(0编辑  收藏  举报