IO操作 绝地灬酷狼 2022-06-03 01:47 229阅读 0赞 File表示文件或文件夹的路径 File file=new File(“F:\\a.text”); file.exists()文件是否存在 File file=new File(“F:\\b”,”a.text”);可以判断前面路径是否存在后面文件 file.createNewFile()创建文件 如果没有就创建并返回true,如果存在就不创建返回false file.mkdir()创建文件夹 文件夹也可以有后缀 例如a.text文件夹 file.mkdirs()创建多级文件夹 file.renameTo(File file)修改名字 路径相同就改名不同就改名并剪切 file.delete()删除文件或文件夹,删除的文件夹内不能包含文件或文件夹 file.isDirectory()判断是否是文件 file.isFile()判断是否是文件 。。。canRead()是否可读,canWrite()是否可写 isHidden()是否隐藏 file.setReadable(boolean)设置是否可读,在windows上设置无效,windows上默认文件是可读的,在linux上游泳 file.setWritable(boolean) 设置是否可写 windows和linux都有效 file.getAbsolutePath()获取绝对路径 file.getPath()获取File构造方法中传入的路径 file.getName()获取文件或文件夹名称 file.length()获取文件长度(字节个数) file.getlastModified()或取最后一次修改时间 距离1970.1.1的毫秒值,可以用Data类将毫秒值修改为当前时间 file.list()获取指定目录下的所有文件或者文件夹的名称数组 file.listFiles()获取制定目录下的文件或文件夹的File数组 io流分为字符流和字节流 字节流可以操作任何数据,因为在计算机中任何数据都是以字节存储的 字符流只能操作纯字符数据,比较方便 字节的抽象父类InputStream和OutputStream 字符的抽象父类 Reader和Writer FileInputStream文件输入流 int a=fis.read()读出一个字节,效率很慢,返回字节对应的码表,例如a对应97,读到末尾返回-1 FileOutputStream创建时如果不存在会帮我们创建文件,如果存在会帮我们清空文件原有的数据 FileOutputStream(name) FileOutputStream(name,true)不清空,以追加的方式打开 fis.available()返回可读取的字节数(文件的大小) read(byte\[\])一次读取多个字节到byte\[\](内存)中,比一次读取一个字节效率高,byte\[\]不宜过大,jvm内存有限 fis.read(byte\[\])返回读取的字节个数 fos.write(byte\[\],a,b)写出数据,从数组的a位置开始写出b个数据 BufferInputStream缓冲区,对输入流进行包装,让读写效率更高BufferInputStream内部维护了一个字节数组大小8192 bis一次读取8192个字节 bis.read一次读取8192个字节存储在缓冲区中,返回给程序一个,当再次读取时直接在缓存曲中读取,直到缓冲区全部读完再次从硬盘中读取8192个字节 然后一个一个给bos当bos存储达到8192个字节再一次写出到硬盘,效率高,降低了硬盘的读取次数 BufferInputStream(InputStream in) BufferOutputStream(OutputStream out) 字节流写出中文可能会出现乱码一个标点符号一个字节 一个汉字两个字节 \\r 回车\\n换行 flush()刷新缓冲区的内容输出到文件 close()关闭流并刷新缓存区的内容到文件 字符流是可以直接读取字符的io流 字符流读取字符,就要先读取到字节,然后转为字符,如果写出字符,就要把字符转为字节再写出 中文为两个字节 通过项目默认的编码表一次读取一个字符,中文第一个字节为负第二个字节可正可负,当码表读取的时候发现第一个字节为负就一次读取两个字节 FileReader() FileWriter() write() read() Write类中有一个2k的小缓存区,如果不关流,就会将内容写到缓存区中 程序读取一段文本或者需要写出的时候可以用字符流 读取的时候是按照字符的大小读取的不会读取半个中文 写出的时候可以直接将字符写出,不用转换为字节数组 字符流不可以读取图片或视频即不可以读取纯文本 因为根据码表读取的字符在码表中并不存在就会用?代替,当写出的时候将字符转换为字节,直接写出?就会破坏原始数据 带缓冲区的字符流 BufferedReader(Reader in)BufferedWriter(Writer out)里面默认包含8192长度的字符数组 Unix 系统里,每行结尾只有“<换行>”,即“\\n”;Windows系统里面,每行结尾是“<回车><换行>”,即“ \\r\\n”; Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行; 而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。 BufferedReader中的readLine()读取一行数据,以\\r或\\n为行终止符,读取的数据中不包含行终止符,读取到流末尾返回null BufferedWriter中的newLine()向文件中输入一个回车换行符 newLine()是跨平台的换行符 \\r\\n回车换行只支持windows系统 LineNumberReader继承与BufferedReader能获取读取的行号getLineNumber() setLineNumber()设置起始的行号 utf-8中一个中文代表三个字节 GBK中一个中文代表两个字节 默认编码表为GBK 以指定编码表读取 InputStreamReader()字节转向字符的桥梁 InputStreamReader(Reader,Charset); 序列流可以把多个字节输入流整合为一个,从序列流中读取数据时,将从被整合的第一个流开始读,读完一个之后继续 读第二个,以此类推 FileInputStream a=new FileInputStream(“a.txt”) FileInputStream b=new FileInputStream(“b.txt”) FileInputStream c=new FileInputStream(“c.txt”) 构造函数SequenceInputStream(InputStream ,InputStream ) sis=new SequenceInputStream(a,b) sis.read() 序列流整合多个输入流的时候(枚举) SequenceInputStream(Enumeration en) Vector v=new Vector(); v.add(a); v.add(b); v.add(c); Enumeration en=v.elements();//将枚举中的输入流整合为一个 new SequenceInputStream(en) 内存输出流 向内存写数据,内存当做缓存区,写入之后一次性获取数据 ByteArrayOutputStream()内部维护了一个可变的字节数组(byte\[\]),相当于在内存中创建了一个可以 增长的数组他不用关闭因为他没有连接硬盘 对象操作流 EOFException 文件读到了末尾 该流可以将一个对象写出,或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作,实体类必须能序列化 ObjectOutputStream(OutputStream),writeObject() ObjectInputStream(InputStream) readObject()可以单个对象读取,也可以一次性读取出来(数组) 打印流 读流可以很方便的将对象的toString()结果输出,并且自动加上换行,而且可以使用自动刷出的模式 System.out就是一个PrintStream,其默认向控制台输出信息 PrintStream ps=System.out;获取标准输入流 ps.println(97);向控制台输出,底层通过Integer.toString()将97转换为字符串输出 ps.write(97) 会输出a,查找码表,找到对应的a并打印 PrintWrite() print()不能自动刷出到文件 println可以自动刷出到文件 System.in标准输入流 System.out标准输出流 InputStream is=System.in; is.read();读取一个字节 is.close(); InputStream is2=System.in; is2.read();会发生错误,标准输入流只存在一个,关闭后再获得的是已经关闭的流。 System.setIn() System.setOut()改变标准输入输出流 键盘录入的两种方式 一 BufferedReader br=new BufferedReader(new InputStreamReader(Sustem.in)); String line=br.readLine(); System.out.println(line); br.close(); 二 Scanner sc=new Scanner(System.in); Scanner不仅可以接收System.in他不仅用于键盘录入 String line=sc.nextLine(); System.out.println(line); sc.close(); 随机访问流 RandomAccessFile 它不属于流,是Object的子类,但它融合了InputStream和OutputStream的功能 支持随机访问文件的读取和输入 RandomAccessFile(“a.txt”,mode)第二个参数为读取模式r 读 w写 raf.read()读一个字节 raf.seek(10) raf.write(“b”)在文件10的位置写入b,位置从0开始,不会把原来的数据删除。可以用于 多线程下载 数据输入输出流,可以按照基本数据类型大小读写数据 例如按Long大小写出一个数据,写出时该数据占八个字节,读取的时候可以按照Long类型读取,一次读取八个字节 DataOutputStream() writeInt()writeLong() DataInputStream() readInt() readLong() 因为字节流的read()write()只能读写一个字节当write(997)时会损失精度,因为997为int型,写入的时候截断了前24位 Properties是Hashtable的子类 表示一个持久性的属性类,可保存在流中或从流中加载,属性列表 中每个键及其对应的值都是一个字符串 Properties prop=new Properties(); prop.put(“abc”,”123”); prop.load(new FileInputStream(“config.properties”)); 向properties中写数据 Properties prop=new Properties(); prop.setProperty(“gjh”,”133333333”); prop.store(new FileInputStream(“config.properties”),”明部分,会以注释方式写入”);
相关 io操作(代码) define _CRT_SECURE_NO_WARNINGS include "stdlib.h" include "stdio.h 红太狼/ 2022年06月12日 14:07/ 0 赞/ 158 阅读
相关 io操作 1.函数原型 int sprintf( char \buffer, const char \format, \[ argument\] … ); [折叠][Link 落日映苍穹つ/ 2022年06月12日 13:58/ 0 赞/ 226 阅读
相关 文件IO操作 File类: file类是IO包中唯一代表磁盘文件本身的对象。file类定义了一些与平台无关的方法来操作文件,通过调用file类提供的各种文件。 能够完成创建,删除,重 你的名字/ 2022年06月08日 08:18/ 0 赞/ 263 阅读
相关 IO操作 File表示文件或文件夹的路径 File file=new File(“F:\\a.text”); file.exists()文件是否存在 File file=new 绝地灬酷狼/ 2022年06月03日 01:47/ 0 赞/ 230 阅读
相关 IO基本操作 package test; import java.io.; public class IOTest2 { st ゝ一世哀愁。/ 2022年05月25日 06:58/ 0 赞/ 197 阅读
相关 IO操作 IO异常处理 / 程序头部注释开始 程序的版权和版本声明部分 Copyright (c) 2011, 烟台大学计算机学院学生 雨点打透心脏的1/2处/ 2022年05月24日 03:48/ 0 赞/ 294 阅读
相关 Java IO操作 一、File类: 利用File可以创建一个路径或是一个文件,并对文件或是路径进行一些操作。 import java.io.File; import java ╰半夏微凉°/ 2022年05月23日 06:25/ 0 赞/ 238 阅读
相关 IO操作 流操作练习 / 程序头部注释开始 程序的版权和版本声明部分 Copyright (c) 2011, 烟台大学计算机学院学生 ゝ一世哀愁。/ 2022年05月17日 10:15/ 0 赞/ 325 阅读
相关 Java IO操作 1 InputStream类型 InputStream的作用是标志那些从不同的数据源产生输入的类,这些源包括:字节数组,String对象,文件,管道,一系列其他流。 た 入场券/ 2021年11月10日 04:18/ 0 赞/ 332 阅读
还没有评论,来说两句吧...