java 拖拉机_Java——io流

一、IO基本分类

1、IO基本分类:(input and output stream)

1.字节流:byte[];没有缓冲区;

抽象基类:InputStream,OutputStream;

2.字符流:char[];有缓冲区;//读取文档使用,可以防止中文乱码;

抽象基类:Reader,Writer;

2、资源释放:jdk1.8新特性;

try(){}:小括号内写需要释放资源的代码,会自动释放;

//无需把close()写在finally代码块中;

二、File:

1、File类:用于文件管理;位于java.io包;

2、构造方法:File(String pathname);//File file=new File("c:/");

3、常用方法:

1.权限控制:

(1)boolean canExecute();查看是否有执行权;

(2)boolean canRead();查看是否有读取权;

(3)boolean canWrite();查看是否有读取权;

public classTest {public static voidmain(String[] args) {

File file= new File("e:/test");

System.out.println(file.canExecute());

System.out.println(file.canRead());

System.out.println(file.canWrite());

}

}

2.文件方法:

创建(1)boolean         createNewFile();创建一个文件;

//返回值:如果创建成功返回true,如果已经存在创建不成功返回false,不会覆盖原有文件;

//文件必须包含文件名和扩展名;

public classTest {public static void main(String[] args) throwsIOException {

File file= new File("e:/test.txt");boolean newFile1 =file.createNewFile();boolean newFile2 =file.createNewFile();

System.out.println(newFile1);//true

System.out.println(newFile2); //false

}

}

判断(2)boolean exists();判断目录或文件是否存在;

判断(3)boolean isFile();判断是否是标准文件;

判断(4)boolean isHidden();判断是否是隐藏文件;

删除(5)boolean delete();删除目录或文件;//返回值;删除成功返回true,失败返回false;

删除(6)void deleteOnExit();关闭jvm时删除文件;

public classTest {public static void main(String[] args) throwsIOException {

File file= new File("e:/test.txt");

System.out.println(file.exists());//false

file.createNewFile();

System.out.println(file.exists());//true

System.out.println(file.isFile()); //true

System.out.println(file.isHidden()); //false

file.exists();

}

}

3.目录方法:

查询(1)String getName();返回目录或文件名;

查询(2)String getParent();返回文件的目录,不包含文件本身的名称;无可返回的值,返回null;

查询(3)String getPath();返回文件的目录,包含文件本身的名称;无可返回的值,返回null;

查询(4)String toString();返回文件的目录,包含文件本身的名称;

public classTest {public static void main(String[] args) throwsIOException {

File file= new File("e:/test/test.txt");

System.out.println(file.getParent());//e:\test

System.out.println(file.getPath()); //e:\test\test.txt

System.out.println(file.toString()); //e:\test\test.txt

}

}

判断(5)boolean isDirectory();判断是否是一个目录;

获取(6)File[] listFiles();返回目录下所有的目录和文件的完整路径名的File数组;

获取(7)String[] list();返回目录下所有的目录和文件的本身名称的File数组;

public classTest {public static void main(String[] args) throwsIOException {

File file= new File("e:/logs");

File[] files=file.listFiles();

System.out.println(Arrays.toString(files));//[e:\logs\dev, e:\logs\prod, e:\logs\sprintboot_2019-0722.log, e:\logs\test]

String[] list =file.list();

System.out.println(Arrays.toString(list));//[dev, prod, sprintboot_2019-0722.log, test]

}

}

获取(8)String[] list(FilenameFilter filter);返回

//传入一个匿名内部类;new FilenameFilter(){重写accpet方法}

public classTest {public static void main(String[] args) throwsIOException {

File file= new File("e:/logs");

String[] list= file.list(newFilenameFilter(){

@Overridepublic booleanaccept(File dir, String name) {return name.endsWith(".log");

}

});

System.out.println(Arrays.toString(list));

}

}

创建(9)boolean mkdir();根据指定的File对象创建一个目录,不支持级联构建;

创建(10)boolean mkdirs();根据指定的File对象创建一个目录,支持级联构建;

三、Reader:所有字符流输入流的基类;不可创建对象;

1、抽象方法:

(1)int read();一次读取流中的一个字符,且会自动往下;

(2)int read(char[] arr);将字符读入数组;

//返回值为读出的个数,且重复调用会向后读(每次重复调用指针回0),如果没有读出返回-1;

public classTest {public static void main(String[] args) throwsIOException {

File file= new File("e:/test.txt");

FileReader fileReader= newFileReader(file);char[] arr = new char[1024];int num = 0;while ((num = fileReader.read(arr))!=-1){

System.out.println(new String(arr,0,num));

}

fileReader.close();

}

}

(2).close();关闭此流,不会刷新;

2、FileReader:Read的操作文件子类;

构造方法:FileReader(String fileName);

//FileReader fw=new FileReader("demo.txt");

3、BufferedReader:Rreader的子类,用于提升效率;

(1)构造方法:BufferedReader(Reader in[, int sz]);

(2)特有方法:String readLine();读取一行,不返回回车符;读取到空行时,返回null;

4、LineNumberReader:BufferedWriter的子类;

(1)构造方法:LineNumberReader(Reader in);

(2)特有方法:

1)void setLineNumber(int lineNumber);设置当前行号;

2)int getLineNumber();获得当前行号;

四、Writer:所有字符流输出流的基类;不可创建对象;

1、抽象方法:

(1).writer(str);写入数据到该流缓冲中;

(2).fulsh();刷新该流缓冲;

(3).close();关闭此流,并刷新;

2、FileWriter:Writer的操作文件子类;

构造方法:FileWriter(String fileName, boolean append);参数二表示是否续写,true续写;

注释:\r\n:换行

//FileWriter fw=new FileWriter("demo.txt");

//会创建该文件到指定目录下,如果已经存在会被覆盖;

3、BufferedWriter:Writer的子类,用于提升效率;

(1)构造方法:BufferedWriter(Writer out[, int sz]);//sz指定大小;

(2)特有方法:newLine();换行;

4、示例和异常处理:

public classTest {public static voidmain(String[] args) {

FileWriter fw= null;try{//创建FileWriter对象

fw = new FileWriter("e:/test.txt");//写入数据;

fw.write("123");

}catch(Exception e) {

e.printStackTrace();

}finally{//关闭流;

try{if (fw != null) { //判断是否为空,为空则无需关闭;

fw.close(); //在finally中关闭流;防止try中产生异常无法关闭;

}

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

五、Reader/Writer文件复制:

public classTest {public static void main(String[] args) throwsException {

FileReader fr= new FileReader("e:/test.txt");

FileWriter fw= new FileWriter("e:/test2.txt");char[] arr = new char[1024];int len = 0;while ((len = fr.read(arr)) != -1) {

fw.write(arr,0, len);

}

fw.flush();

fw.close();

fr.close();

}

}

六、InputStream:所有字节流输入流的基类;不可创建对象;

1、抽象方法:

(1)void close();关闭;

(2)int read();读取一个字节;返回0-255的字节值;如无字节返回-1;

(3)int read(byte[] b);把数据流读入到名为b的byte类型的数组中;

//可多次读取,依次向后,每次返回读取的个数,如无数据可读返回-1;

(4)int read(byte[],int off,int len);把数据流中最多len个字节读入到byte数组的指定开始位置;

//参数:off:数组存储的开始位置;len:长度;

(5)int available();返回总字节数;//数据太大时不建议使用,会导致内存溢出;

2、FileIputStream:InputStream的核心实现类;

构造方法:

(1)FileInputStream(File file);构建一个FileInputStream对象指向一个File对象;

(2)FileInputStream(String name);构建一个FileInputStream对象指向一个name表示的路径对应的资源;

3、BufferedInputStream:InputStream的子类,用于提升效率;

七、OutputStream:所有字节流输入流的基类;不可创建对象;

1、抽象方法:

(1)void close();关闭,且刷新流;

(2)void flush();刷新了流;

(3)void write(int b);将一个字节写入;

(4)void write(byte[] b);把一个字节数组写入;

(5)void write(byte[] b,int off,int len);参数:off数组开始位置;len传入的长度;

2、FileOutputStream:OutputStream的核心实现类;

构造方法:

(1)FileOutputStream(File file[, boolean append]);

(2)FileOutputStream(String name[, boolean append]);

//会创建该文件到指定目录下,如果已经存在会被覆盖;

文件覆盖问题解决方案:

(1)每次生成一个新的文件;//用时间命名文件,getTime();

(2)在原文件的基础上追加内容;//构造函数

3、BufferedOutputStream:OutputStream的子类,用于提升效率;

4、代码示例,文件复制:

//try(){}catch{}在()中声明流可以自动关闭;1.8jdk

public classTest {public static void main(String[] args) throwsException {try (FileInputStream fis = new FileInputStream("D:/Users/Desktop/123.avi");

FileOutputStream fos= new FileOutputStream("D:/Users/Desktop/demo.avi");) {byte[] arr = new byte[1024];int len = 0;while ((len = fis.read(arr)) != -1) {

fos.write(arr,0, len);

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

* Game 类 * 功能:整个游戏:开始游戏 -> 初始牌 -> 洗牌 -> 发牌 -> 排序 -> 比较大小 -> 游戏结果 * 游戏说明: * 1.创建一副扑克牌,不考虑大小王 * 2.创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合 * 3.洗牌,将之前创建的扑克牌顺序打乱 * 4.发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张 * 5.开始游戏,比大小,大小相同比花色 * * PockerCard 类 * 功能:扑克牌的核心类 包括创建角色、创建牌、显示牌、洗牌、比较牌、排序牌等 * 属性:List cards 整幅扑克牌的集合 、 People[] peoples 角色 * 方法: public PockerCard() //无参构造函数: 创建牌的集合、创建两个角色对象 * public void initializeCard() //创建整幅扑克牌 * public void showCard() //显示单支牌的花色和点数 * public void refreshCard() //洗牌 从第一支牌开始从所有牌中随机取一只与之交换 * public void addPeopleInfo() //添加玩家的基本信息 * public void dealCard() //发牌 从开始分别给A B发牌 每人两支 * public void showPeopleCard() //显示两个角色自己获得的牌 * public void sortCard() //将每个角色自己的牌按从小到大排序 * public void comparePeopleCard() //比较角色的牌 * * SingleCard类 实现Comparable接口 * 功能:产生单支牌 * 属性:ID、color、keyID数组、keyColor数组 * 方法:public SingleCard(){} //无参构造函数 * public SingleCard(String ID,String color) //有参构造函数 * @Override public int compareTo(SingleCard o) //比较当前牌与SingleCard o的牌的大小 * * People类 * 功能:产生一个角色 * 属性:ID、Name、和、存储牌的List集合。 * 方法: public People() //初始化存储牌的List集合; *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值