Java的IO流

本文详细介绍了Java中的File类,包括路径处理、构造方法、成员功能如文件/目录存在性检查、大小和修改时间获取,以及IO流的基础概念,如字节流与字符流的区别,以及OutputStream、Writer和InputStream、Reader的使用实例。
摘要由CSDN通过智能技术生成

一 File类

  1.File类概述

    File类将会涉及到关于文件目录的创建,删除,重命名,修改时间,文件大小,读入和输出等方法;要在Java程序中表示一个真实存在的文件或目录必须要有一个File类对象,但Java程序中的一个File对象并不一定对应一个真实存在的文件或目录;File对象可作为参数传递给流构造器,指明读取或写入的目标位置。

  2.File类的使用

    (1)绝对路径:固定的路径,从盘符开始

    (2)相对路径:是相对于某个位置开始

    (3)构造方法:

import java.util.*;
import java.io.File;
public class Main{
    public static void main(String[] args){
        String s1="C:\\User\\ASUS\\test.txt";
        String s2="C:\\USer\\ASUS";
        String s3="test.txt";
        File f1=new File(s1);//以s1为绝对路径创建File对象
        File f2=new File(s2,s3);//以s2为父路径,s3为子路径创建File对象
        File f3=new File(s2);//以s2为绝对路径创建File对象
        File f4=new File(f3,s3);//以File对象f3的绝对路径为父路径,s3为子路径创建File对象
        System.out.println(f1);
        System.out.println(f2);
        System.out.println(f3);
        System.out.println(f4);
        }
}
/*output:
C:\User\ASUS\test.txt
C:\USer\ASUS\test.txt
C:\USer\ASUS
C:\USer\ASUS\test.txt
 */

  (4)成员方法:

import java.util.*;
import java.io.File;
public class Main{
    public static void main(String[] args){
        String s1="C:\\User\\ASUS\\test.txt";
        String s2="C:\\USer\\ASUS";
        String s3="test.txt";
        File f1=new File(s1);//以s1为绝对路径创建File对象
        File f2=new File(s2,s3);//以s2为父路径,s3为子路径创建File对象
        File f3=new File(s2);//以s2为绝对路径创建File对象
        File f4=new File(f3,s3);//以File对象f3的绝对路径为父路径,s3为子路径创建File对象
        System.out.println(f1.exists());//判断此路径表示的File对象是否真实存在
        System.out.println(f1.canRead());//判断此路径表示的File对象是否可读
        System.out.println(f1.canWrite());//判断此路径表示的File对象是否可写
        System.out.println(f2.length());//返回文件大小,返回值为long类型,表示字节大小
        System.out.println(f3.isDirectory());//判断此路径表示的File对象是否是文件夹
        System.out.println(f4.getAbsolutePath());//返回文件的绝对路径,返回值为String类型
        System.out.println(f2.getPath());//返回定义文件时使用的路径,返回值为String类型
        System.out.println(f2.getParent());//返回上层文件目录路径,返回值为String类型,若无上层文件则返回null
        System.out.println(f3.getName());//返回文件的名称,带后缀,返回值为String类型
        System.out.println(f4.lastModified());//返回该文件最后一次修改的时间,返回值为long类型
        }
}
/*
f1=C:\User\ASUS\test.txt
f2=C:\USer\ASUS\test.txt
f3=C:\USer\ASUS
f4=C:\USer\ASUS\test.txt
output:
true
true
true
11
true
C:\USer\ASUS\test.txt
C:\USer\ASUS\test.txt
C:\USer\ASUS
ASUS
1712375617329
 */

(5)创建与删除文件

import java.util.*;
import java.io.File;
public class Main{
    public static void main(String[] args){
        String s1="C:\\User\\ASUS\\test.txt";
        String s2="C:\\USer\\ASUS";
        String s3="test.txt";
        File f1=new File(s2,s3);
        File f2=new File(s2,"o1\\o2");
        if(f2.mkdir()){
            System.out.println("f2.mkdir创建成功");//由于上级文件o1并不存在所以单级创建的f2.mkdir()返回值为false
        }
        if(f2.mkdirs()){
            System.out.println("f2.mkdirs创建成功");//多级创建会连同不存在的上级文件o1一起创建
        }
        System.out.println(f1.exists());//判断此路径表示的File对象是否存在
        f1.createNewFile();//返回值类型是boolean,若文件已经存在则返回false,否则返回true
        System.out.println(f1.exists());//判断此路径表示的File对象是否存在
        System.out.println(f1.isDirectory());//判断此路径表示的File对象是否是文件夹
        f1.delete();//删除f1
        System.out.println(f1.exists());
        }
}
/*
output:
false
true
false
flase
 */

二 IO流

  1.IO流概述

    顾名思义,输入输出流,其作用自然是用来读写数据的。按照传输方向划分分为输入流和输出流,按照数据单位划分分为字节流和字符流,所以IO流总共分为四大类:字节输出流,字节输入流,字符输出流,字符输入流;字符流相比于字节流可以读取/输出不同的语言,不容易出现读取/输入乱码现象。

  2.输出流

    OutputStream类是字节输出流,而Writer类则是字符输出流。

    (1)OutputStream

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException {
        String s1="C:\\User\\ASUS\\test.txt";
        String s2="C:\\USer\\ASUS";
        String s3="test.txt";
        File f1=new File(s2,s3);
        OutputStream out=new FileOutputStream(f1,true);//f1为输出的目标文件,第二个参数为true是写入方式为从尾部添加,若为false则为覆写
        out.write("Hello ".getBytes());
        out.write("Worl".getBytes());
        out.write(100);
        out.close();//关闭资源流
    }
}
/*
output:
test.txt文件中的内容被从尾部添加了”Hello World“
 */

    (2)Writer

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException {
        String s1="C:\\User\\ASUS\\test.txt";
        String s2="C:\\USer\\ASUS";
        String s3="test.txt";
        File f1=new File(s2,s3);
        Writer out=new FileWriter(f1,false);//f1为输出的目标文件,第二个参数为true是写入方式为从尾部添加,若为false则为覆写
        out.write("你好".toCharArray());
        out.write(",世界晚安".toCharArray(),0,2);
        out.write(30028);
        out.close();//关闭资源流
    }
}
/*
output:
test.txt文件中的内容被覆写成了”你好,世界“
 */

  3.输入流

    InputStream是字节输入流,而Reader则是字符输入流。

    (1)InputStream

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException {
        String s1="C:\\User\\ASUS\\test.txt";
        String s2="C:\\USer\\ASUS";
        String s3="test.txt";
        File f1=new File(s2,s3);
        byte[] store=new byte[10];
        InputStream in=new FileInputStream(f1);//f1为获取输入的的目标文件
        System.out.print((char)in.read());//读取一个字节并强制转化为char输出
        in.read(store,0,5);//从store数组的0位置开始从目标文件中读取5个字节并存入store
        for(byte ele:store){
            if(ele!=0)System.out.print((char)ele);
        }
        in.read(store);//从目标文件读取最多为store数组长度的字节数内容
        for(byte ele:store){
            if(ele!=0)System.out.print((char)ele);
        }
        in.close();//关闭资源流
    }
}
/*
output:
Hello World
 */

    (2)Reader

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException {
        String s1="C:\\User\\ASUS\\test.txt";
        String s2="C:\\USer\\ASUS";
        String s3="test.txt";
        File f1=new File(s2,s3);
        char[] store=new char[10];
        Reader in=new FileReader(f1);//f1为获取输入的的目标文件
        System.out.print((char)in.read());//读取一个字符(返回为int类型)并强制转化为char输出
        in.read(store,0,2);//从store数组的0位置开始从目标文件中读取2个字符并存入store
        for(char ele:store){
            if(ele!=0)System.out.print(ele);
        }
        in.read(store);//从目标文件读取最多为store数组长度的内容
        for(char ele:store){
            if(ele!=0)System.out.print(ele);
        }
        in.close();//关闭资源流
    }
}
/*
output:
你好,世界
 */

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值