文件操作与IO流基础

文件类File

 File file=new File("D:\\java\\zs2\\eatfood.txt");
        if(file.isFile()){
            System.out.println("是个文件");
        }
        else{
            System.out.println("没有");
            try {
                file.createNewFile();
                System.out.println("创建新文件");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("名称"+file.getName());
        System.out.println("相对路径"+file.getPath());
        System.out.println("绝对路径"+file.getAbsolutePath());
        System.out.println("文件大小"+file.length()+"B");

但是File类不管文件内容。

IO流

输入输出流分为两大类,一个是8位字节流,一个是16位字符流
这样就有四个基类
InputStream
OutputStream
Reader
Writer

四个基类都是抽象类,可以用它们的子类创建对象对文件内容进行修改。
前面加一个File就是他们的其中一个子类,用法相似。

FileOutputStream fileout;
try {
    fileout=new FileOutputStream("D:\\java\\zs2\\eatfood.txt",true);//第二个参数可有可无,是否追加,默认不追加。
    String str="what a lucky man\n";
    byte[] b=str.getBytes();
    fileout.write(b,0,b.length);
    fileout.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

FileInputStream filein;
try {
    filein=new FileInputStream("D:\\java\\zs2\\eatfood.txt");
    int data;
    System.out.println("可读字节数:"+filein.available());
    System.out.println("文件内容:");
    while((data=filein.read())!=-1){//利用read()逐个存入变量
        System.out.print((char)data);
    }
    filein.close();
} catch (FileNotFoundException e) {//无法找到文件
    e.printStackTrace();
} catch (IOException e) {//IO错误
    e.printStackTrace();
}

FileWriter filewrit;
BufferedWriter bufferwrit;
try {
    filewrit=new FileWriter("D:\\java\\zs2\\eatfood.txt");
    bufferwrit=new BufferedWriter(filewrit);
    filewrit.write("I am Zhangshuo     ");
    filewrit.append("hhh\n");//这俩好像一样的功能

    bufferwrit.write("I am so cool");
    bufferwrit.newLine();
    bufferwrit.write("what about you?");
    bufferwrit.flush();//刷新就相当于输到文件中
    filewrit.close();
}catch (IOException e) {
       e.printStackTrace();
}

FileReader fileread;
try {
    fileread=new FileReader("D:\\java\\zs2\\eatfood.txt");
    char[] str=new char[300];
    fileread.read(str);   //利用read(char []);直接存到数组中
    System.out.println();
    for(char c:str)
    System.out.print(c);
    fileread.close();
} catch (FileNotFoundException e){
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

Buffered加在这四个基类前面就是另四个子类。
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
带参构造有两个参数,第一个是基类的对象,第二个是int
表示开一个制定大小的缓冲区,如果没有第二个参数,就是默认大小。避免每次都进行字符编码的转换,多次使用的时候提高效率。
Buffered基类和File基类用法类似

你可能感兴趣的:(——————JAVA基础)