/** * 初识IO流 * 输入流input/reader,数据从数据源到程序。输出流output/writer,数据从程序到目的地。输入输出是相对程序而言 * 字节流stream结尾,以字节为单位获取数据。字符流reader/writer结尾,以字符为单位获取数据,字符char为2字节unicode * 节点流,直接从数据源或目的地读写数据的流。处理流/包装流,不直接连接数据源/目的地,对流进行处理/包装的流 */ public class firstIO { //使用FileInputStream和FileOutputStream进行文件读写操作 //类结尾Stream代表字节流,input代表输入流,output代表输出流,file代表操作对象为文件,即以字节为单位对文件进行访问的流,直接连接文件/数据源所以是节点流 public static void main(String[] args) { String path = firstIO.class.getClassLoader().getResource("").getPath()+"testIO.txt"; System.out.println(path); //路径为"/C:/Users/86158/IdeaProjects/projectDIVA/out/production/iostream/testIO.txt" //.getResource()得到的是编译后的class文件所在位置的路径,在out目录下而非当前正在编写的java文件所在路径 try (FileOutputStream fos = new FileOutputStream(path)){ //try-with-resource包裹io操作 fos.write(97); //传入int类型,转化为字节存储,当通过文本的方式读取时才会转换显示为字符 fos.write(100); fos.write(103); //Stream字节流是以字节为单位,存取的字符只能为0-255即对应ASCII码 fos.write(355); //当超过byte范围会溢出,355-256=99对应字符c //作为文本文件打开时内容为"adgc" }catch (Exception e){ //catch处理异常 e.printStackTrace(); } try(FileInputStream fis = new FileInputStream(path)){ for (int i = fis.read();i!=-1;i = fis.read()){ //FileInputStream类的.read()为向后读取一个字节/8位二进制数,读到字节时会返回十进制数值,返回值类型为int,作为文本读取需要(char)手动转换为字符,当文件读完、向后读不到字节时返回-1 System.out.print((char) i); //文件中的换行符也会被读取到,所以不需要println换行 //结果为adgc } }catch (Exception e){ e.printStackTrace(); } File f = new File("iostream/testFile.txt"); //File文件类 将文件/目录转换为对象的包装类,对文件/目录包装之后可以调用File类内的方法 //创建File对象需要指定绝对路径或相对路径 new File("")默认生成当前项目目录下的路径 System.out.println(f.getName()); //.getName()只返回文件名,不包含路径 结果为testFile.txt System.out.println(f.getPath()); //.getPath()返回创建File对象时传入的路径,如果创建时传入的是绝对路径则返回绝对路径,如果传入的是相对路径则返回相对路径 结果为iostream estFile.txt System.out.println(f.getAbsolutePath()); //.getAbsolutePath()返回绝对路径 结果为C:Users86158IdeaProjectsprojectDIVAiostream estFile.txt System.out.println(f.exists()); //查询文件/目录f是否存在,结果为false try { System.out.println(f.createNewFile()); //.createNewFile()创建新文件(非目录),如果路径中某级不存在或者已存在同名文件或目录(含后缀的目录)则创建失败返回false,创建成功返回true } catch (IOException e) { throw new RuntimeException(e); } System.out.println(f.delete()); //删除文件f,如果不存在则返回false,这里删除只会删除testFile.txt文件,目录树C:Users86158IdeaProjectsprojectDIVAiostream不会删除,因为目录iostream是File("C:Users86158IdeaProjectsprojectDIVAiostream")而不是C:Users86158IdeaProjectsprojectDIVAiostream estFile.txt System.out.println(f.isFile()); //查询f是否为文件,当没有同名文件或者f为目录时返回false System.out.println(f.length()); //返回文件的字节数,即文件大小,结果为0,f为空文件 System.out.println(f.isHidden()); //判断文件f是否为隐藏文件,hidden隐藏的,结果为false System.out.println(f.isDirectory()); //查询f是否为目录,不存在或f为文件时返回false,结果为false System.out.println(f.mkdir()); //创建目录f,当路径中某级不存在或者f为文件或者目录f已存在时返回false,结果为false System.out.println(f.mkdirs()); //创建目录树f,当路径中某级不存在时创建这些中间路径,f为文件或者已存在目录f时返回false,结果为false File f2 = f.getParentFile(); //.getParentFile()返回上一级目录的File对象 System.out.println(f2.getPath()); //结果为iostream,因为f使用相对路径创建,所以f2也为相对路径创建 System.out.println(f.getParent()); //.getParent()返回上一级的路径字符串,结果为iostream和f2.getPath()相同 String[] fileList = f2.list(); //.list()返回目录f2下的所有文件名 System.out.println(Arrays.toString(fileList)); //结果为[iostream.iml, src, testFile.txt],返回文件名不包含路径 File[] files = f2.listFiles(); //.listFiles()返回目录f2下的所有文件的File对象 System.out.println(Arrays.toString(files)); //结果为[iostreamiostream.iml, iostreamsrc, iostream estFile.txt],直接打印File对象时.toString返回.getPath() } }