可能你只想简单的使用,暂时不想了解太多的知识,那么请看这里,了解一下如何读文件,写文件
与上面的类似,解释就不多写啦
复制 File file = new File("Q:\\t.txt"); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "GBK"); BufferedWriter writer = new BufferedWriter(outputStreamWriter); writer.write("hello world"); writer.close();//必须要调用close才能成功地将内容写入文件文件不存在的话会自动生成该文件,但是如果是带有文件夹的话,就得考虑到文件夹不存在的情况
例如:
复制 File file = new File("Q:\\test\\t.txt"); File temp = file.getParentFile(); if (!temp.exists()) { temp.mkdirs();//文件夹不存在,则新建一个文件夹 } OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "GBK"); BufferedWriter writer = new BufferedWriter(outputStreamWriter); writer.write("hello world"); writer.close();这里使用的是字节流,把t.txt复制到Q盘中的MY文件夹中,并改名
复制 FileInputStream inputStream = new FileInputStream("Q:\\t.txt"); FileOutputStream outputStream = new FileOutputStream("Q:\\MY\\t1.txt"); int c; //读到尾部则是返回-1 while ((c = inputStream.read()) != -1) { outputStream.write(c); } inputStream.close(); outputStream.close();PS:这里和之前一样,如果文件夹不存在,就得调用mkdirs方法进行创建文件夹的操作,除了txt文件,其他的文件也是可以这样复制
File对象代表磁盘中实际存在的文件和目录
静态属性 File.separator 分隔符 windows操作系统是\,linux操作系统则是/
构造方法
File(File parent, String child) 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例File(String pathname) 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。常用方法
public String getName() 返回由此抽象路径名表示的文件或目录的名称。public String getParent() 返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回 nullpublic File getParentFile() 返回此抽象路径名的父路径名的抽象路径名的file对象,如果此路径名没有指定父目录,则返回 nullpublic String getPath() 将此抽象路径名转换为一个路径名字符串public boolean exists() 判断此抽象路径名表示的文件或目录是否存在public boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录public boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。public boolean delete() 删除此抽象路径名表示的文件或目录public boolean mkdirs() 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件主要的还是两种,字节流和 字符流
所有的文件在硬盘或在传输时都是以字节的方式进行,包括图片等,而字符是只有在内存中才会形成,所以在开发中,字节流使用较为广泛。
PidedinputStream
PidedOutputStream
StringReader
StringWriter
上面字节流和字符流一般不会直接使用,实际上,缓冲流是一个装饰类,可以给字符流和字节流添加缓冲这功能。
BufferReader BufferWriter 其实这两个也是包括在字符流里面的使用的时候传入一个Writer或者是Reader对象即可
复制BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter()); BufferedReader bufferedReader = new BufferedReader(new FileReader());1. try把reader,writer等对象放在括号内,可以自动关闭输入/输出流,并释放资源(输出流会自动调用close方法) 如果有多个资源,使用分号隔开ps: jdk1.7+支持 例如:
复制try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(""))){ ... }catch(Excetion e){ ... }2. 可以使用|来捕获多个异常
复制try{ ... }catch(NullPointerException | ArrayIndexOutOfBoundsException e){ //捕获了两个异常 }基本如上面代码一样,只是输出的时候需要使用bufferwriter输出
序列化和反序列化
序列化:把内存中的序列对象保存在二进制文件中 反序列化:把二进制文件读取,获得原来的文件
需要类实现序列化接口serializable 标识接口里面没有任何的内容 transient关键字 可以让类的某个属性在序列化的过程中不进行写入
复制List<Book> books = new ArrayList<>(); for (int i = 0; i < 5; i++) { Book book = new Book("机战风暴"+i,"乱",56); books.add(book); } ObjectOutputStream objectOutputStream = null; try { objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("e:\\out.bin"))); } catch (IOException e) { e.printStackTrace(); } for (Book book : books) { objectOutputStream.writeObject(book); } objectOutputStream.writeObject(null);//写入一个null,防止之后出现EOFException objectOutputStream.close(); ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("e:\\out.bin"))); Object o = null; try { while ((o = objectInputStream.readObject()) != null) { Book book = (Book) o; System.out.println(book.toString()); } } catch (ClassNotFoundException e) { e.printStackTrace(); } }转载于:https://www.cnblogs.com/chaoyang123/p/11549826.html