将对象以文本写入一个文件,再读取并在控制台输出
1.首先创建一个Mybook对象
public class MyBook { private String name; private String author; private LocalDate date; public MyBook(){ } public MyBook(String name,String author,int year,int month,int day){ this.name=name; this.author=author; this.date=LocalDate.of(year,month,day); } public String getName() { return name; } public String getAuthor() { return author; } public LocalDate getDate() { return date; } }
2.写的操作
public class MyFileTest { public static void main(String[] args) throws FileNotFoundException { //初始化数组 MyBook[] books=new MyBook[4]; books[0]=new MyBook("coreJava","Unknown",2012,2,6); books[1]=new MyBook("coreJava","Unknown",2012,2,6); books[2]=new MyBook("coreJava","Unknown",2012,2,6); books[3]=new MyBook("coreJava","Unknown",2012,2,6); //写操作 try(PrintWriter out=new PrintWriter(new FileOutputStream("book.txt"))){ writeData(out,books); } } private static void writeData(PrintWriter out, MyBook[] books) { out.println(books.length); for (MyBook myBook:books){ writeBook(out,myBook); } } private static void writeBook(PrintWriter out, MyBook myBook) { out.println(myBook.getName()+"|"+myBook.getAuthor()+"|"+myBook.getDate()); } }
Note:
1.PrintWriter对象:进行文本格式打印字符串和数字,是Writer的子类
常用的构造方法:PrintWriter(String fileName, String csn)/PrintWriter(OutputStream out),这里采用的第二种,FileOutputStream是OutputStream的子类
2.带流的try{}:会在程序执行完成后自动执行close()
3.InputStream/OutputStream:读入/写入一个字节序列的输入输出流
Reader/Writer:读写基于两个字节序列的char值
一般读写操作使用它们的子类的读写放法,本例中,使用PrintWriter中的println()进行输出
4.FileInputStream/FileOutputStream 没有具体的读写文本的方法,(read(),write()只能读写单字节),它们的作用就是来获取流,用流来构造具有相应读写功能的对象。
3.读操作
public class MyReaderFileTest { public static void main(String[] args) throws FileNotFoundException { //获取文件流 FileInputStream fis=new FileInputStream("employee.txt"); //构建有读文本功能的对象 try(Scanner in=new Scanner(fis,"utf-8")){ MyBook[] myBooks=readData(in); for (MyBook myBook:myBooks){ System.out.println(myBook); } } } private static MyBook[] readData(Scanner in) { int n=in.nextInt();//有4个数据 in.nextLine(); MyBook[] myBooks=new MyBook[n]; for (int i=0;i<n;i++){ myBooks[i]=readBook(in); } return myBooks; } private static MyBook readBook(Scanner in) { String line=in.nextLine(); String[] strs=line.split("\\|");//将以‘|’分开的部分组装为一个数组 String name=strs[0]; String author=strs[1]; LocalDate date=LocalDate.parse(strs[2]); int year=date.getYear(); int month=date.getMonthValue(); int day=date.getDayOfMonth(); return new MyBook(name,author,year,month,day); } }


成功读取!代码是CoreJava这本书上的,不得不说人家这代码写的真心溜!

浙公网安备 33010602011771号