-------
android培训、
java培训、期待与您交流! ----------
1:OutputStreamWriter与InputStreamReader
OutputStreamWriter是字符流通向字节流的桥梁;
InputStreamReader是字节流通向字符流的桥梁;
2:小细节
其实转换流已经出现了编码转换,而之所以产生两个子类FileReader和FileWriter是因为将本地默认编码表封装;便于操作文本文件,而出现的便捷类;记住如果字节流发生了变化,不再操作文本或者编码不再是编码表,就不可以使用FileReader和FileWriter,这时只能使用转换流InputStreamReader和OutputStreamWriter;
3:键盘录入(按照毕老师的话就是背也要记住它):
BufferedReader bufr=new BufferedReader(new InputStreadReader(System.in));
4: 流的基本操作规律:
目的是为了在开发中可以明确具体使用哪个流对象更合适;
明确一:数据源或者目的(汇);
源:对应的体系是InputStream Reader;
目的:对应的体系是 OutputStream Writer;
明确二:操作数据是否是纯文本文件;
源:是纯文本文件 对应体系是:Reader;
目的:也是纯文本文件 对应的体系是:Writer;
如果不是文本文件直接用字节流操作;
明确三:数据具体所在设备,因为不同设备对应不同的对象;
源设备:硬盘 键盘 网络 内存
File开头 System.in Socker 数组 ByteArray CharArray String目的设备: 硬盘 显示器 网络 内存File开头 System.Out Socker 数组 ByteArray CharArray String
明确四:是否需要额外功能(1):需要提高效率:BufferedReader BufferedWriter;(2):需要桥梁编码转换:InPutStreamReader OutPutStreamWriter
(3):需要在输出时保证数据的原样表示形式吗?PrintStream PrintWriter 的print方法。(4):需要对输入流合并吗?SequenceInputStream。(5):需要将对象序列化和反序列化吗?ObjectOutputStream ObjectInputStream(6):需要操作基本类型数据吗?DataInputStream DataOutputStream。
5:常见对象:
File file=new File("D:\\day\\........."); //将("D:\\day\\.........")封装成对象;注:Separator(静态方法 使用时直接类名打点调用,是系统默认的分隔符和“\\”“/”一样,不过它有跨平台性);
6:File类常见方法一(获取方法)
File file = new File("d:\\0.mp3"); //举例说明方法怎么用long total = file.getTotalSpace();//举例说明方法怎么用1: Long Length (获取文件字节数);
2: Long Freespace (获取磁盘可用剩余空间);3: Long time(获取创建时间); //获取时间需要转换毫秒数;(颜色相同代码实现转化毫秒数)4 : Long LastModified (获取最后一次修改时间);
System.out.println("time="+time);Date date = new Date(time);DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.LONG);String str_time = dateFormat.format(date);System.out.println(str_time);File file = new File("d:\\0.mp3"); //举例说明方法怎么用String name= file.getname(); //举例说明方法怎么用
5 :Strng getname (获取文件名);
6: String getPath (后去完整路径);7: String getParent(获取父类或磁盘名称)8: String getabsolutePath (获取绝对路径)File类常见方法二(创建方法)File file = new File("d:\\0.mp3"); //举例说明方法怎么用boolean b = file.exists(); //举例说明方法怎么用1:boolean createNewFile ( 创建文件 如果文件不存在则创建,若存在不创建 返回值是False);2:boolean delete (删除文件 java删除文件不走回收站);3:boolean exists (判断文件是否存在);4:boolean isFile (判断是否是文件 首先要先用exists判断文件是否存在);5:boolean isDirectory (判断是否是目录 首先要先用exists判断文件是否存在);6:boolean mkdir(创建文件夹 只能创建一级目录 例:d:\\kk);7:boolean mkdir(创建多级目录 例:d:\\kk\\ss\\aa\\cc);8: ListRoots 列出电脑磁盘目录;9:ListFiles 列出磁盘下所有文件;
7 :递归 :
就是将函数自身直接或者间接的调用函数自身;对于一个功能重复使用,每次使用这个功能通常都需要 上次功能运算的内容进行参与; 注意问题:必须要加入条件,否则会出现栈内存溢出 StackoverflowError。 注意递归次数必要过多,会栈内存溢出;
8:常用类:
1:Properties 是Hashtable子类;特点:持久的属性集;该集合可以和流技术结合;键值对应的都是字符串;不需要泛型;
方法:Load :将流关联的特定格式数据加载进集合;
Setproperty:修改文件内容;
Store:将集合中的元素存储到文件中;
2:打印流: PrintStream与PrintStream可以直接操作输入流和文件PrintStream(永远不会抛出IOException异常)方法:writer:显示的是最低八位,也就是讲一个整数的四个字节中最低一个字节写入到目的地;
print :表现形式不变,但是字节变了,打印方法可以将数据原来表示形式原样打印到目的地中;
PrintStream 加上true有一个自动刷新;
3:序列流:SequenceInputStream 对多个流进行合并 通常用来合并的都是碎片。
4:操作对象:ObjectInputStream与ObjectOutputStreamSerializable标记接口用于给类定义SerializablesionUID用的;与每个序列化类相关联;静态数据是不会被序列化;
transient瞬态:当对非静态的数据不希望对其进行序列化的时候就用瞬态修饰;
5:操作基本数据类型:DataInputStream与DataOutputStreamwriterInt :保证基本数据类型的字节数不变,将整数字节都写入;
readInt: 自动读取四个字节并将其转换成整数返回;
6:操作字节数组:ByteArrayInputStream与ByteArrayOutputStream用于操作数组流对象该流对象是对应设备为内存的流对象;这个流不需要关闭,因为没有使用系统资源
7:操作字符数组:CharArrayReader与CharArrayWrite
8:操作字符串: StringReader 与StringWriter
9:管道流:PipedInputStream和PipedOutputStream(1):输入与输出可以直接进行连接,通过结合线程使用;
(2):需要与多线程结合,单线程容易死锁;
10:其他类:RandomAccessFile(1): 随机访问该对象中封装了操作文件的字节流和字符流缓冲区;通过指针方式对数组中数据进行操作;
因为指针可以由Seek方法任意指定位置,所以可以实现对数组数据随机访问;
(2): 只能对文件进行读写;(3): 即可以读,又可以写;关联文件不存在则创建,如果存在不覆盖;
随机读写文件时数据要有规律,随机读写就是将文件数据存储数据存储到数组中;通过操作角标方法
getFilepointer和Seek对数组元素进行操作;
IO流体系:
小结:刚开始学习IO流给我的感觉就是很难去理解,感觉看上去每个关键字都差不多,其实IO流的操作是有规律可寻的,而且总体的代码只要理解后都是万变不离其宗,比如怎么去读写数据、键盘录入、包括对异常的处理等等。学习IO要深入的去理解去学习,继续吧!字符流:Reader|--BufferedReader:|--LineNumberReader|--CharArrayReader|--StringReader|--InputStreamReaer|--FileReader
Writer|--BufferedWriter|--CharArrayWriter|--StringWriter|--OutputStreamWriter|--FileWriter|--PrintWriter
字节流:InputStream|--FileInputStream:|--FilterInputStream|--BufferedInputStream|--DataInputStream|--ByteArrayInputStream|--ObjectInputStream|--SequenceInputStream|--PipedInputStream
OutputStream|--FileOutputStream|--FilterOutputStream|--BufferedOutputStream|--DataOutputStream|--ByteArrayOutputStream|--ObjectOutputStream|--PipedOutputStream|--PrintStream
RandomAccessFile: seek();