黑马程序员-10 IO流2 File,properties,合并流,对象持久化,管道流,RandomAccessFile...
------- android培训、java培训、期待与您交流! ----------
File 将文件和文件夹封装成对象
File类常见方法:
1,创建。
boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdir():创建文件夹。
boolean mkdirs():创建多级文件夹。
2,删除。
boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
void deleteOnExit();在程序退出时删除指定文件。
3,判断。
boolean exists() :文件是否存在.
isFile():
isDirectory();
isHidden();
isAbsolute();
4,获取信息。
getName():
getPath():
getParent():
getAbsolutePath()
long lastModified()
long length()
==============================================================
import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.util.Date; public class FileMethodDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // getDemo(); // createAndDeleteDemo(); // isDemo(); // renameToDemo(); // listRootsDemo(); } public static void listRootsDemo() { File[] files = File.listRoots(); for (File file : files) { System.out.println(file); } File file = new File("c:\\"); System.out.println(file.getFreeSpace()); System.out.println(file.getTotalSpace()); System.out.println(file.getUsableSpace()); } public static void renameToDemo() { File f1 = new File("c:\\0.mp3"); File f2 = new File("d:\\9.mp3"); f1.renameTo(f2); } public static void isDemo() throws IOException { File f = new File("a.txt"); boolean b = f.exists(); System.out.println("exists?:" + b); // 最好先判断是否存在 System.out.println("isFile?:" + f.isFile()); System.out.println("isDirectory?:" + f.isDirectory()); } public static void createAndDeleteDemo() throws IOException { File dir = new File("abc\\a\\b\\c\\d"); // boolean b=dir.mkdir();//创建单级目录 // boolean b=dir.mkdirs();//创建多级目录 // System.out.println("b:"+b); System.out.println("del:" + dir.delete()); // 文件的创建和删除 File file = new File("file.txt"); /* * 和输出流不一样,如果文件不存在,则创建;如果文件存在,则不创建。 */ // boolean b=file.createNewFile(); // System.out.println("b:"+b); // boolean b=file.delete(); // System.out.println("b:"+b); } public static void getDemo() { File file = new File("a.txt"); String name = file.getName(); String abspath = file.getAbsolutePath(); String path = file.getPath(); long len = file.length(); long time = file.lastModified(); Date date = new Date(time); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG); String str_time = dateFormat.format(date); System.out.println("parent:" + file.getParent());// 文件对象中是绝对路径时,获取父目录;相对路径时,null System.out.println("name:" + name); System.out.println("path:" + path); System.out.println("abspath:" + abspath); System.out.println("len:" + len); System.out.println("time:" + time); System.out.println("str_time:" + str_time); } }
===============================================
Properties是hashtable的子类。
也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。
是集合中和IO技术相结合的集合容器。
该对象的特点:可以用于键值对形式的配置文件。
那么在加载数据时,需要数据有固定格式:键=值。
import java.io.*; import java.util.*;class PropertiesDemo {public static void main(String[] args) throws IOException{//method_1(); loadDemo();}public static void loadDemo()throws IOException{Properties prop = new Properties();FileInputStream fis = new FileInputStream("info.txt"); //源文件//将流中的数据加载进集合。prop.load(fis); //从输入流中读取属性列表(键和元素对)。 prop.setProperty("wangwu","39");FileOutputStream fos = new FileOutputStream("info.txt");prop.store(fos,"haha");// System.out.println(prop); prop.list(System.out);fos.close();fis.close();}//演示,如何将流中的数据存储到集合中。//想要将info.txt中键值数据存到集合中进行操作。/*1,用一个流和info.txt文件关联。2,读取一行数据,将该行数据用"="进行切割。3,等号左边作为键,右边作为值。存入到Properties集合中即可。*/public static void method_1()throws IOException{BufferedReader bufr = new BufferedReader(new FileReader("info.txt"));String line = null;Properties prop = new Properties();while((line=bufr.readLine())!=null){String[] arr = line.split("=");///System.out.println(arr[0]+"...."+arr[1]);prop.setProperty(arr[0],arr[1]);}bufr.close();System.out.println(prop);}// 设置和获取元素。public static void setAndGet(){Properties prop = new Properties();prop.setProperty("zhangsan","30");prop.setProperty("lisi","39");// System.out.println(prop);String value = prop.getProperty("lisi");//System.out.println(value); prop.setProperty("lisi",89+"");Set<String> names = prop.stringPropertyNames(); for(String s : names) {System.out.println(s+":"+prop.getProperty(s));}} }
==========================================================
合并流
SequenceInputStream
表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
import java.io.*; import java.util.*; class SequenceDemo {public static void main(String[] args) throws IOException{Vector<FileInputStream> v = new Vector<FileInputStream>();v.add(new FileInputStream("c:\\1.txt"));v.add(new FileInputStream("c:\\2.txt"));v.add(new FileInputStream("c:\\3.txt"));Enumeration<FileInputStream> en = v.elements();SequenceInputStream sis = new SequenceInputStream(en);FileOutputStream fos = new FileOutputStream("c:\\4.txt");byte[] buf = new byte[1024];int len =0;while((len=sis.read(buf))!=-1){fos.write(buf,0,len);}fos.close();sis.close();} }=================================================================== 对象的持久化(序列化)ObjectOutputStreamimport java.io.*;class ObjectStreamDemo {public static void main(String[] args) throws Exception{//writeObj(); readObj();}public static void readObj()throws Exception{ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));Person p = (Person)ois.readObject();System.out.println(p);ois.close();}public static void writeObj()throws IOException{ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));oos.writeObject(new Person("lisi0",399,"kr"));oos.close();} }被传送的类必须是被序列化的,序列号由成员变量生成,类修改之后序列号改变。import java.io.*; class Person implements Serializable //启用Serializable实现其序列化 {public static final long serialVersionUID = 42L; //自己指定uid,也可以省略有系统生成private String name;transient int age; //如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。也就是不能被序列化。static String country = "cn"; // 静态变量不能被序列化。(只序列化堆中的变量)Person(String name,int age,String country){this.name = name;this.age = age;this.country = country;}public String toString(){return name+":"+age+":"+country;} }
================================
管道流
PipedInputStream PipedOutputStream
传送输入流应该连接到传送输出流;传送输入流会提供要写入传送输出流的所有数据字节。通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream。不建议对这两个对象尝试使用单个线程,因为这样可能会死锁该线程。传送输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。
import java.io.*;class Read implements Runnable {private PipedInputStream in;Read(PipedInputStream in){this.in = in;}public void run(){try{byte[] buf = new byte[1024];System.out.println("读取前。。没有数据阻塞");int len = in.read(buf); //阻塞式方法System.out.println("读到数据。。阻塞结束");String s= new String(buf,0,len);System.out.println(s);in.close();}catch (IOException e){throw new RuntimeException("管道读取流失败");}} }class Write implements Runnable {private PipedOutputStream out;Write(PipedOutputStream out){this.out = out;}public void run(){try{System.out.println("开始写入数据,等待6秒后。");Thread.sleep(6000);out.write("piped lai la".getBytes());out.close();}catch (Exception e){throw new RuntimeException("管道输出流失败");}} }class PipedStreamDemo {public static void main(String[] args) throws IOException{PipedInputStream in = new PipedInputStream();PipedOutputStream out = new PipedOutputStream();in.connect(out);Read r = new Read(in);Write w = new Write(out);new Thread(r).start();new Thread(w).start();} }
==================================================================
RandomAccessFile
此类的实例支持对随机存取文件的读取和写入。随机存取文件的行为类似存储在文件系统中的一个大型字节数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机存取文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
该类不是算是IO体系中子类。
而是直接继承自Object。
但是它是IO包中成员。因为它具备读和写功能。
内部封装了一个数组,而且通过指针对数组的元素进行操作。
可以通过getFilePointer获取指针位置,
同时可以通过seek改变指针的位置。
其实完成读写的原理就是内部封装了字节输入流和输出流。
通过构造函数可以看出,该类只能操作文件。
而且操作文件还有模式:只读r,,读写rw等。
如果模式为只读 r。不会创建文件。会去读取一个已存在文件,如果该文件不存在,则会出现异常。
如果模式rw。操作的文件不存在,会自动创建。如果存则不会覆盖。
import java.io.*;class RandomAccessFileDemo {public static void main(String[] args) throws IOException{//writeFile_2();//readFile();//System.out.println(Integer.toBinaryString(258)); }public static void readFile()throws IOException{RandomAccessFile raf = new RandomAccessFile("ran.txt","r");//调整对象中指针。//raf.seek(8*1);//跳过指定的字节数raf.skipBytes(8);byte[] buf = new byte[4];raf.read(buf);String name = new String(buf);int age = raf.readInt();System.out.println("name="+name);System.out.println("age="+age);raf.close();}public static void writeFile_2()throws IOException{RandomAccessFile raf = new RandomAccessFile("ran.txt","rw");raf.seek(8*0);raf.write("周期".getBytes());raf.writeInt(103);raf.close();}public static void writeFile()throws IOException{RandomAccessFile raf = new RandomAccessFile("ran.txt","rw");raf.write("李四".getBytes());raf.writeInt(97);raf.write("王五".getBytes());raf.writeInt(99);raf.close();} }
======================
转载于:https://www.cnblogs.com/grjelf/archive/2012/10/26/2740091.html
黑马程序员-10 IO流2 File,properties,合并流,对象持久化,管道流,RandomAccessFile...相关推荐
- 黑马程序员-10.一位老农带着猫、狗、鱼过河
------ Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 题目是10. 一位老农带着猫.狗.鱼过河,河边有一条船,每次老农只能带一只动物过河.当老农不和 ...
- 黑马 程序员——Java基础---IO(下)
黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...
- 黑马程序员——Java字符流、字节流IO流
黑马程序员--Java字符流.字节流Io流 ---------------------- <a href="http://www.itheima.com"target=&qu ...
- 黑马程序员-Java教程-10缓冲流、转换流、序列化流
day10[缓冲流.转换流.序列化流.打印流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本 ...
- 黑马程序员UI设计学院公开课,10月18日开讲啦!
揭秘网红照"骗"的那点秘密公开课,重磅来袭! 本期导读: 如今的大众文化圈,已经不再单纯.平民狂欢造就一茬又一茬的网络红人.这是多元的时代使然,不修片不发图,充斥在互联网上的网红的 ...
- 黑马程序员,黑马论坛----黑马.Net 10期 史无前例的就业速度12天就业71.43%
来源:黑马程序员,黑马论坛 黑马.Net 10期史无前例的就业速度,12天就业71.43% "幸福来的如此突然!"黑马 .Net 10期的学员说的最多的一句话.多少 ...
- 黑马程序员入学Java知识——精华总结
黑马程序员入学Java知识--精华总结 J2SE部分,Java高新技术部分,7K面试题部分等黑马入学要求的知识点总结! 一.黑马程序员-java概述与基础知识 6 1.何为编程? 6 2.Java语言 ...
- [学习笔记]黑马程序员-Hadoop入门视频教程
文章目录 参考资料 第一章:大数据导论与Linux基础(p1-p17) 1.1 大数据导论 1.1.1 企业数据分析方向 1.1.2 数据分析基本流程步骤 明确分析的目的和思路 数据收集 数据处理 数 ...
- 远程字典服务Redis,感谢B站黑马程序员,多多三连
目录 1.数据存储的解决方案(电商场景) 2.远程字典服务Redis介绍 2.1 基本操作 2.2 数据存储类型 3.数据类型 3.1 string 3.1.1 string类型数据基本操作 3.1. ...
最新文章
- C#中Socket多线程编程实例
- 【论文解读】打破常规,逆残差模块超强改进,新一代移动端模型MobileNeXt来了!精度速度双超MobileNetV2...
- B - 一只小蜜蜂...
- vsftpd设置被动模式_(1)vsftpd主、被动模式iptables配置方法
- windows 远程连接debian_免受版权困扰的远程控制软件,优秀!
- 英文java简历模板下载_JAVA技术人员英文简历模板
- 《工业设计史》 绪论
- 使用WSS的Lists.UpdateListItems()方法之被截断的CAML
- linux udp 套接字编程获取源地址和目的地址(一)
- 关键词作用和选择技巧
- 灭霸一个响指,开源众包出现在开源中国的社区APP里,一键接单从此无忧。
- 线性分式变换(linear fractional transformation)
- Kafka3.0 SASL安全认证
- 《7天精通直播带货》运营型主播成长型,提升直播能力与技巧
- Unity3D Soft Mask 软遮罩插件
- html中列表前面的序号带圆圈,js动态添加带圆圈序号列表方法
- linux上卸载php,linux怎么卸载软件?
- gcc连接脚本 ld.info
- Altium designer18系列教程一 建工程和封装介绍
- 转到计算机科学与技术专业的申请书,转专业的申请书范文(精选5篇)
热门文章
- linux下的shell中if的-e,-d,-f是什么意思
- python垃圾回收 (GC) 机制
- hadoop关键进程
- scala中的隐式转换、隐式参数和隐式类
- TensorFlow学习笔记(十六)tf.random_normal
- RDD基本转换操作:zipWithIndex、zipWithUniqueId
- Apollo 10 — adminService 全量发布
- “中国智造”为System x提供创新源动力
- python-----运算符及while循环
- 《C++覆辙录》——2.9:自反初始化