- 浏览: 1590074 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
java之19天 IO 转换流(三)
- 博客分类:
- Java
读取键盘录入
转换流的使用
流的一般操作规律
改变标准的输入输出设备
异常的日志信息
格式化系统信息输出
转换流的使用
/** * 读取键盘录入 * System.out : 对应的是标准的输出设备,默认:控制台 * System.in : 对应的是标准的输入设备,默认:键盘 * * 需求: * 通过键盘录入数据 * 当录入一行数据后,就将该行数据进行打印. * 如果录入的数据是over,那么 停止录入. * * InputStreamReader: 字节转 字符 读取流 * 通过需求变形2,发现 其实就是读取一行readLine的原理 * 思考: * 能不能直接使用readLine方法完成键盘录入一行数据的读取呢? * readLine()是字符流BufferedReader类的方法 * 而键盘录入的read方法是字节流InputStream的方法 * 那么能不能将字节流转换成字符流在使用字符流缓冲区的readLine()方法呢? * (请看变形3) * * OutputStreamWriter: 字节转 字符 写入流 */ public class ReadIn { public static void main(String[] args) throws IOException { //method_1(); //method_2(); method_4(); } //既然有 字节 --转--字符 读取流 肯定有字节 --转--字符写入流 public static void method_4() throws IOException{ /*//接受键盘输入 InputStream in=System.in; //转换流读取流: 字节 -->字符 InputStreamReader isr=new InputStreamReader(in); //读取 BufferedReader bufr=new BufferedReader(isr);*/ //简写 上面三句 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); //设置输出的目的地 /*OutputStream out=System.out; //转换流写入流: 字节 -->字符 OutputStreamWriter osw=new OutputStreamWriter(out); BufferedWriter bufw=new BufferedWriter(osw);*/ //简写 上面三句 BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out)); String line=null; while((line=bufr.readLine())!=null){ if("over".equals(line)) break; bufw.write(line.toUpperCase()); bufw.newLine(); bufw.flush(); } bufr.close(); bufw.close(); } //发现 变形2 其实就是读取一行的原理 public static void method_3() throws IOException{ //获取键盘录入对象. InputStream in=System.in; //将字节流转换成字符流对象,使用转换流,InputStreamReader InputStreamReader isr=new InputStreamReader(in); //为了提高效率,将字符串进行缓冲区技术搞笑操作,使用BufferedReader BufferedReader bufr=new BufferedReader(isr); String line=null; while((line=bufr.readLine())!=null){ if("over".equals(line)) break; System.out.println(line.toUpperCase()); } bufr.close(); } //需求 变形2 public static void method_2() throws IOException{ InputStream in=System.in; StringBuilder sb=new StringBuilder(); while(true){ int ch=in.read(); if(ch==13) //13='\r' continue; if(ch==10){ String s=sb.toString(); if("over".equals(s)) break; System.out.println(s.toUpperCase()); sb.delete(0, sb.length()); }else{ sb.append((char)ch); } } } //需求 变形1 public static void method_1() throws IOException{ InputStream in=System.in; int ch=0; while((ch=in.read())!=-1){ System.out.println(ch); } } //键盘输入 public static void method() throws IOException{ InputStream in=System.in; int by=in.read();// 阻塞式方法 System.out.println(by); int by1=in.read();// 阻塞式方法 System.out.println(by1); //window中的换行 System.out.println('\r'+0); //13 System.out.println('\n'+0);//10 } }
流的一般操作规律
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; /** * 1. * 源:键盘录入 * 目的:控制台 * * 2.需求:想把键盘录入的数据存储到一个文件中. * 源:键盘 * 目的:文件 * * * 3.需求:想要将一个文件的数据打印在控制台上. * 源:文件 * 目的:控制台 * * * 流操作的基本规律 * 最痛苦的就是流对象有很多,不知道用那个 * * 通过三个明确来完成 * 1.明确源和目的 * 源 : 输入流 InputStream Reader * 目的: 输出流 OutputStream Writer * 2.明确操作的数据是否是纯文本 * 是 : 字符流 * 不是: 字节流 * 3.当体系明确后,在明确要使用哪个具体的对象 * 通过设备来进行区分 * 源设备 :内存,硬盘 ,键盘 * 目的设备:内存 ,硬盘,控制台 * * 1.需求:将一个文本文件数存储到另一个文件.--复制文件 * 源 :因为是源,所以使用 读取流 InputStream Reader * 是不是操作文本文件? * 是: 这是就可以选择Reader. 这样体系就明确了 * 接下来明确要使用该系统中的哪个对象 * 明确设备?--> 硬盘上的一个文件 * Rreader 体系中 可以操作文具的对象 是 FileReader. * * FileReader fr=new FileReader("a.txt"); * * 是否需要提高效率呢? * 是! 加入Reader体系缓存去中 的 BufferedReader * * BufferedReader bufr=new BufferedReader(fr); * * * 目的 :OutputStream Writer * 目的是否是纯文本呢? * 是:Writer * 设备:硬盘,一个文件 * Writer体系中可以操作文件的对象是:FileWriter * * FileWriter fw=new FileWriter("b.txt"); * * 是否需要提高效率呢? * 是! 加入Writer体系缓存去中 的 BufferedWriter * * BufferedWriter bufw=new BufferedWriter(fw); * * 练习:将一个图片文件中数据存储到另一个文件中,复制文件,要按照以上格式自己完成三个明确 * 源:因为是源:所以可以选择读取流是 InputStream Reader * 是不是操作文本文件? * 不是! 所以选择 InputStream * 明确体系中使用的那个对象 ? * 明确设备--->硬盘上一个图片 * InputStream 体系中可以操作 字节流的对象是 :FileInputStream * FileInputStream fis=new FileInputStream("a.jpg"); * * 是否要提高效率呢? * 是! 加入InputStream体系中缓冲区 BufferedInputStream * BufferedInputStream bufis=new BufferdInputStream(fis) * * 目的:OutputStream Writer * 图片: OutputStream * 硬盘上的一个文件 * FileOutputStream fos=new FileOutputStream("b.jpg"); * 是否提高效率? * 是: * BufferedOutputStream bufos=new BufferedOutputStream(fos); * * * ----------------------------- * 2.需求:将键盘录入的数据保存到一个文件中 * 源:InputStream Reader * 是不是纯文本? 是: Reader * 设备:键盘 对应的对象是Sytem.in * 不是选择Reader吗? System.in对应的不是字节流吗? * 为了操作键盘的文件数据方便,转成字符流按照字符串操作的最方便. * 所以既要明确Reader 那么就需要将System.in转成 Reader * 用了Reader 体系中的InutStreamReader. * * InputStreamReader isr=new InputSreamReader(System.in); * * 需要提高 效率吗? 需要 BufferedReader * BufferedReader bufr=new BufferedReader(isr); * * 目的:OutputStream Writer * 是否是纯文本?是 Writer * 设备:硬盘,一个文件,使用 FileWriter * FileWriter fw=new FileWriter("c.txt"); * 需要提高效率吗? * BufferedWriter bufw=new BufferedWriter(fw) * * * * 扩展下:想要把录入的数据按照指定的编码表(utf-8)将数据保存到文件中 * 目的: OutputStream Writer * 是否是纯文本?是 Writer * 设备:硬盘,一个文件,使用 FileWriter * 但是FileWriter使用的默认编码表 GBK * * 但是要存储的是,需要加入指定的编码表UTF-8 而指定的编码表只有转换流可以指定. * 所以要使用的对象是OutputStreamWriter * 而该转换流对象要接受一个字节输出流,而且还可以操作文件的字节输出流, FileOutputStream * * OutputStraemWriter osw=new OutputStreamWriter(new FileOutputStream("a.txt"),"UTF-8"); * * 需要提高效率吗? * 是 * BufferedWriter bufw=new Buffered(osw); * 所以,记住,转换流什么时候用? 字节和字符之间的桥梁,通常,涉及到的字符编码转换时候,需要使用大转换流. * */ public class TransStreamDemo2 { public static void main(String[] args) throws IOException { //method(); //method_1(); //method_2(); method_3(); } //读取上面 d.txt 由于是UTF-8所以不能使用 FileReader,因为FileReader 使用 的GBK public static void method_3() throws IOException{ BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("E:\\workspace4\\exam\\d.txt"),"UTF-8")); BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out)); String line=null; while((line=bufr.readLine())!=null){ bufw.write(line); bufw.newLine(); bufw.flush(); } bufr.close(); bufw.close(); } //输出到指定编码格式的文件中 UTF-8 public static void method_2() throws IOException, FileNotFoundException{ BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8")); String line=null; while((line=bufr.readLine())!=null){ if("over".equals(line)) break; bufw.write(line); bufw.newLine(); bufw.flush(); } bufr.close(); bufw.close(); } //需求2 public static void method_1() throws IOException{ BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("E:\\workspace4\\exam\\src\\com\\itheima\\day19\\p1\\CopyPic.java"))); BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out)); String line=null; while((line=bufr.readLine())!=null){ if("over".equals(line)) break; bufw.write(line.toUpperCase()); bufw.newLine(); bufw.flush(); } bufr.close(); bufw.close(); } //需求2: public static void method() throws IOException{ BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("outputSteam.txt"))); String line=null; while((line=bufr.readLine())!=null){ if("over".equals(line)) break; bufw.write(line.toUpperCase()); bufw.newLine(); bufw.flush(); } bufr.close(); bufw.close(); } }
改变标准的输入输出设备
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintStream; /** * 改变默认的输出 :控制台 * 和输入设备:键盘 * System.setIn() * System.setOut() */ public class TransSystemInOutDemo { public static void main(String[] args) throws IOException { method_2(); } //输出到指定编码格式的文件中 UTF-8 public static void method_2() throws IOException{ //修改源 System.setIn(new FileInputStream("E:\\workspace4\\exam\\FileReaderDemo_copy.txt")); //修改目的 System.setOut(new PrintStream("zz.txt")); BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out)); String line=null; while((line=bufr.readLine())!=null){ if("over".equals(line)) break; bufw.write(line); bufw.newLine(); bufw.flush(); } bufr.close(); bufw.close(); } }
异常的日志信息
import java.io.IOException; import java.io.PrintStream; import java.text.SimpleDateFormat; import java.util.Date; /** * 异常信息的保存 * 网络上有个 log4j工具 专门用于处理 日志信息的打印 */ public class ExceptionInfo { public static void main(String[] args) { method_4(); } //变形4 加入异常发生的时间 public static void method_4() { try { int[] arr=new int[2]; System.out.println(arr[3]); } catch (Exception e) { try { Date d=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String s=sdf.format(d); PrintStream ps=new PrintStream("exception.log"); // ps.print(d.toString()); ps.println(s); System.setOut(ps); ps.close(); } catch (Exception e2) { throw new RuntimeException("日志文件创建失败!"); } e.printStackTrace(System.out); } } //变形 三 发现 还不够完善 没有时间啊 public static void method_3() { try { int[] arr=new int[2]; System.out.println(arr[3]); } catch (Exception e) { try { System.setOut(new PrintStream("exception.log")); } catch (Exception e2) { throw new RuntimeException("日志文件创建失败!"); } e.printStackTrace(System.out); } } //变形二 打印大文件中去 public static void method_2() throws IOException{ try { int[] arr=new int[2]; System.out.println(arr[3]); } catch (Exception e) { e.printStackTrace(new PrintStream("a.txt")); //发现原来还打印在控制台了 } } //变形一 //e.printStackTrace() -->里面写的就是 e.printStackTrace(System.out) public static void method_1(){ try { int[] arr=new int[2]; System.out.println(arr[3]); } catch (Exception e) { e.printStackTrace(System.out); //发现原来还打印在控制台了 } } public static void method(){ try { int[] arr=new int[2]; System.out.println(arr[3]); } catch (Exception e) { e.printStackTrace(); } } }
格式化系统信息输出
import java.io.IOException; import java.io.PrintStream; import java.util.Properties; public class SystemInfo { public static void main(String[] args) throws IOException { Properties prop=System.getProperties(); //以前 System.out.println(prop); //Properties 能够和流相连 prop.list(System.out); //发现还是打印在控制台 //想保存在文件中 prop.list(new PrintStream("systemInfo.txt")); //这个流没有关闭哦 } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 998public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2282经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5654package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 986import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1055/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1009//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1825更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1417import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 816import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2397import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 925// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1173import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 802import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1145import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3893import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 965/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1023import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1842Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1005/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2230package out; import ja ...
相关推荐
12. **IO流和NIO**:了解Java的IO流体系,以及New IO (NIO) 提供的非阻塞I/O操作。 13. **网络编程**:学习Socket编程,包括TCP和UDP通信,以及ServerSocket和Socket类的使用。 14. **反射机制**:掌握如何在运行...
流分为字节流和字符流,有输入流和输出流之分,还有缓冲流、转换流、对象流等。理解流的层次结构和操作方式对于文件读写、网络通信等场景至关重要。 5. **设计模式**:设计模式是解决常见编程问题的最佳实践,如...
【IT十八掌徐培成】的Java基础课程涵盖了广泛的编程概念,其中第19天的第3部分专门讲解了“定义消息报文”。在Java编程中,消息报文是通信和网络编程的重要组成部分,它涉及到如何在不同系统或程序之间交换信息。...
Java序列化是将对象状态转换为可保持或传输的格式(例如,将对象以字节流的形式保存在文件中)的过程。要使一个类可序列化,该类必须实现Serializable接口。 6. 一个".java"源文件中是否可以包括多个类(不是内部类...
4 使用异常的技巧与原则 第7章 IO——输入输出流 7. 1 获取文件的属性信息 7. 2 列出指定目录下的文件 7. 3 创建文件和目录 7. 4 删除文件和目录 7. 5 移动文件和目录 7. 6 复制文件和...
- 包:`java.lang`, `java.util`, `java.io`, `javax.servlet`, `javax.persistence`。 - 接口:`List`, `Set`, `Map`, `Runnable`, `Callable`。 36. **java中会存在内存泄漏吗,请简单描述** - Java中的内存...
`java.util`、`java.io`等包;`Comparable`、`Serializable`等接口。 34. **内存泄漏**:在Java中,由于垃圾回收机制的存在,内存泄漏较少见,但仍然可能发生。 35. **实现多态的机制**:基于继承和接口实现。 36...
Java 2实用教程(第三版)实验指导与习题解答 清华大学出版社 (编著 耿祥义 张跃平) 实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 ...
- **Java序列化**: 是一种将对象的状态转化为字节流的过程,目的是为了保存对象状态或者在网络上传输对象。 - **实现序列化**: 实现序列化的类需要实现 `Serializable` 接口,并且可以使用 `ObjectOutputStream` 和 ...
- **包**:`java.lang`、`java.util`、`java.io`、`java.awt`、`javax.swing` - **接口**:`Runnable`、`Comparable`、`Comparator`、`Iterable`、`Callable` #### 36. java中会存在内存泄漏吗,请简单描述。 理论...
常用的包有java.lang、java.util、java.io等。常用接口有Comparable、Serializable、Cloneable等。 20. 类的反射机制 反射机制允许程序在运行期间访问和操作类、方法、接口等的内部信息。 21. 如何唤起类中的一个...
- **序列化**:将对象的状态转换为字节流的过程,以便于在网络上传输或保存到磁盘上。 - **实现**:实现`Serializable`接口或使用`Externalizable`接口。 示例: ```java import java.io.Serializable; public ...
- 使用`java.io.ObjectOutputStream`和`java.io.ObjectInputStream`类来序列化和反序列化对象。 7. **一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?** - 可以包含多个类,但只有一个公共...
在Java中,通常将对象转换为字节流。 - **实现方式**:让类实现`Serializable`接口,然后使用`ObjectOutputStream`和`ObjectInputStream`类进行对象的序列化和反序列化。 #### 7. 一个".java"源文件中是否可以包括...
- 获取某个日期是否是当月的最后一天:可以使用 `java.time.LocalDate` 类的方法。 - 格式化日期:使用 `java.text.SimpleDateFormat` 或 `java.time.format.DateTimeFormatter`。 5. **数组和集合** - 数组是...
#### 第19天~第21天:Java中的各种集合容器使用 1. **集合框架概述**: - 集合的定义与分类:List、Set、Map。 - Collection与Map接口的区别。 - Iterator与ListIterator迭代器。 2. **常用集合类**: - List...
- 包:`java.util`、`java.io`、`java.lang`、`java.sql`、`javax.servlet` - 接口:`Runnable`、`Callable`、`Comparator`、`Serializable`、`Cloneable` #### 36. java中会存在内存泄漏吗,请简单描述。 尽管...
14. **Java标准库**:深入理解Collections、IO、NIO、并发工具包等核心API的使用。 15. **JVM原理**:虚拟机的工作原理,如类加载机制、内存模型、字节码执行等。 16. **Spring框架**:依赖注入、AOP(面向切面...
- **列出目录下所有文件**:使用`java.io.File`类的`listFiles()`方法。 - **列出目录下所有子目录**:同样使用`File`类,结合递归算法。 - **判断文件或目录是否存在**:使用`File.exists()`方法。 - **读写文件**...