-
FileReader/FileWriter:可以直接写文件名的路径。与InputStreamReader相比坏处:无法指定读取和写出的编码,容易出现乱码。只能读取与项目编码方式相同的文件<br> FileReader fr = new FileReader("e:\\javaio\\imooc.txt"); //输入流<br> FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt");//输出流<br> 字符流:字符流分为输出流(Reader)和输入流(Writer)。操作的是文本文件。<br> 字符处理,一次处理一个字符<br> 字符处理底层还是基本的字节序列<br> InputStreamReader:完成byte流解析为char流,按照编码解析<br> FileInputStream in = new FileInputStream("e:\\javaio\\imoocutf8.txt");<br> //获取字符输入流<br> InputStreamReader isr = new InputStreamReader(in,"utf-8");//默认项目的编码,操作的时候,要写文件本身的编码格式<br> OutputStreamWriter:提供char流到byte流,按照编码处理<br> FileOutputStream out = new FileOutputStream("e:\\javaio\\imoocutf81.txt");<br> //获取字符输出流<br> OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");查看全部
-
public static void main(String[] args)throws IOException { FileInputStream in = new FileInputStream("e:\\javaio\\imoocutf8.txt"); InputStreamReader isr = new InputStreamReader(in,"utf-8");//默认项目的编码,操作的时候,要写文件本身的编码格式 FileOutputStream out = new FileOutputStream("e:\\javaio\\imoocutf81.txt"); OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8"); /*int c ; while((c = isr.read())!=-1){ System.out.print((char)c); }*/ char[] buffer = new char[8*1024]; int c; /*批量读取,放入buffer这个字符数组,从第0个位置开始放置,最多放buffer.length个 返回的是读到的字符的个数 */ while(( c = isr.read(buffer,0,buffer.length))!=-1){ String s = new String(buffer,0,c); System.out.print(s); osw.write(buffer,0,c); osw.flush(); } isr.close(); osw.close(); }查看全部
-
字符流 1)编码问题 前已述及 起码有一点要非常清楚的是,一切进入计算机的都会变成字节码 2)认识文本和文本文件 java中的文本(其实就是char)16位的无符号整数,是字符的unicode编码(这是一种双自己编码) 文件是byte byte byte...的数据集合,可以缩句来理解 文件输数据集合。字节流的编码方式和序列化规则不一样就形成了不同的文件:文本文件,音频文件,视频文件等 文本文件是文本(char的编码)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的数据存储集合 (3)字符流 抽象类 Reader Writer 二者实现了数据的两种相互转换,存储时我们用字节码的形式存储,读入计算机内存处理(包括显示,运算等)是用字符(ABC...)的形式。 字符的处理,一次处理一个字符。其底层仍然是基本的字节序列 字符流的基本实现 InputStreamReader 完成byte流解析为char流,按照编码接卸 OutputStreamWriter 提供char流到byte流,按照编码处理。 为什么上面特别说明了一下文本文件,因为字符流大部分操作的都是文本文件。毕竟文本文编,以编码的方式不容易认读,我们才把字符编码解析为字符。如果Reader一个MP3之类的音频文件,根本就没有什么意义,因为,声音本来就不是用来看的,所以说字符流主要是用于处理文本文件的查看全部
-
BufferedInputStream&BufferedOutputStream 提供了带缓存区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能 从应用程序中把输入放入文件,相当于将一罐水倒入到另外一个罐中: FileOutputStream-->write()方法相当于一滴一滴地把水“转移”过去 DataOutputStream-->writeXxx()方法会方便一些,相当于一瓢一瓢把水“转移” BuffereOutputStream-->write()方法更方便,相当于一瓢一瓢先放入 桶中,在从桶中倒入到另外一个罐中查看全部
-
输出字符,最后一定要关闭查看全部
-
readInt readLong 方法都是对FileInputStream方法的包装 DataOutputStream/DataInputStream 对“流”功能的扩展,可以更加方便的读取 int,long, 字符等类型数据 DataOutputStream:使用FileOutputStream构造出来,通过包装FileOutput,可以调用FileOutput类的write方法来构造新的更方便的写方法: new DataOutputStream(new FileOutptStream(file)) wrieteUTF()采用utf-8编码写出字符串 用utf-16be写出字符串,或字符串数组 写完之后一定要关闭流 数据输入输出流: DataInputStream、DataOutputStream 是对“流”功能的扩展,方便读写 DataOutputStream dos = new DataOutputStream(new FileOutputStream(file)); dos.writeInt(10); dos.writeLong(10l);字母l dos.writeDouble(10.5); //采用utf-8编码写出 dos.writeUTF("中国"); //采用utf-16be编码写出 dos.writeChars("中国");查看全部
-
文件复制——看的不是很明白查看全部
-
如果这个文件不是文件,也可抛出异常,提示无异常查看全部
-
先判断文件是否存在,若文件不存在,throw 一个异常,提示文件不存在查看全部
-
输入、输出是相对于字节流或者字符流而言的:<br> 1:输入,是将字节或者字符从文件中输入到流中<br> 2:输出,是将字节或者字符从流中输出到文件中<br> <br> 我们可以将文件想象程容器,将文件的内容(字节或者字符)想象程水,我们这里学习的JAVA对象就像是管道一样,并且能够控制从水池里获取水形成输入流,也可以将水注入到水池中形成输出流。 如果文件不存在,则创建;如果存在,则删除后再创建,但是换一种构造方法加一个true就可以变成在文件后追加内容了 单字节输出每次输出一个字符的低八位。输出一个int类型字符需要移位输出四次查看全部
-
FileOutputStream的write的用法: 举例:write(‘A’); write只能写八位,写一个int需要四次,每次8为,还要先右移动查看全部
-
对子进行序列化操作,会调用父类的构造函数 对子类进行反序列化操作时,会调用没有继承序列化接口的父类的构造函数查看全部
-
对象中的属性值添加transient关键字后,该元素不会进行jvm默认的序列化 自己进行序列化 private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{ s.defaulWriteObject();//完成jvm默认的序列化操作 s.writerInt(属性);//自己完成该属性的序列化 } 自己进行反序列化 private void readObject(java.io.ObjectInputStream s) throws java.io.IOException,ClassNotFoundException{ s.defaulReadObject();//完成jvm默认的反序列化操作 this.属性 = s.readwriterInt();//自己完成该属性的反序列化 }查看全部
-
ObjectInputStream /ObjectOutputStream 对象的序列化,就是将Object转换成byte序列,反之叫反序列化 序列化的对象必须要实现Serialize接口 writeObject() /readObject()查看全部
-
将String转换成byte型,使用的是String类的getByte方法,其中的参数表明使用哪种编码存储 eg: String s ="慕课网"; byte[] byte1 =s.getByte("utf-8"); 把字节(转换成int,需先转换为int的包装类Integer,再使用Integer的toHexString(b)方法)以16进制的方式显示.&oxff起到去除无效0的作用 eg: Integer.toHexString(b &oxff); 将字节码转换成字符串, String str =new String(byte,"utf-8"); 注意如果你存储的文本是以utf-8的编码形式存储的,表明这个文本只认识utf-8这种编码方式的字符串。如果是其他编码的字符串存储进了这个文本就会出现乱码。查看全部
举报
0/150
提交
取消