- 浏览: 31406 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
-
hyjasonlee:
birthday 为Date 能取数据出来吗?我用sqlite ...
利用dbutils框架简化jdbc开发
----------------------------android培训、java培训、期待与您交流!----------------------------------
总结:
转换流的应用:
public static void main(String[] args) throws IOException { //发现读取键盘的方式,和readLine的功能是一致的。 //那么已经有这个功能,直接去使用即可。 //但是很遗憾。System.in。是字节读取流。 //readLine是BufferedReader字符流对象的方法。 //键盘录入。 InputStream in = System.in; //需要将字节流转成字符流。 InputStreamReader isr = new InputStreamReader(in); //使用缓冲区的readLine 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(); }
IO流的操作规律
三个明确:
1,明确源(读)和目的(写)。
其实就是在明确输入流还是输出流。
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
2,明确操作的数据内容。
其实就是在明确字符流还是字节流。
如果数据都是纯文本数据使用字符流。
如果数据是非文本数据使用字节流。
前两步已经明确了使用哪一个体系。
3,明确具体的设备。
明确使用的具体对象。
源设备:内存,键盘(System.in),硬盘(文本)(File)。
目的设备:内存,控制台(System.out),硬盘(文件)(File).
扩展部分:需要进行高效操作吗?
是:加入缓冲区技术(Buffered)。
小练习:
-------------------------------------------------- 需求1: 读取键盘,并键盘录入的数据变成大写打印在控制台上。 自己动手完成分析步骤。 需求2: 读取键盘录入数据,将数据变成大写,保存到一个文件中。 分析: 源:键盘,InputStream。Reader 是纯文本数据:Reader. 设备:System.in. 已经明确了使用读取字符流体系,可是设备是键盘System.in是读取字节流对象。 这时就需要将字节流转成字符流。用到了InputStreamReader. 需要高效吗?需要。Buffered BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); 大家记住,以后老师在说读键盘录入,就写这句代码! 目的:硬盘,OutputStream Writer 纯文本?yes Writer 设备:硬盘文件 FileWriter。 缓冲,yes BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt")); BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"))); BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),"GBK")); 这三句都是等效的。使用都是默认的编码表GBK. 另加一个需求? 想要将录入的数据按照UTF-8另一个编码表的形式进行数据的存储。 那么目的就要变化了,因为FileWriter,虽然可以作为文件目的对象,但是该对象中的编码表是默认的GBK。 当想要指定编码表时,必须要使用转换流。 BufferedWriter bufw = BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),"UTF-8")); ############################################## #记住:凡是涉及到编码转换的操作, # #一定要想到转换流,如果只用默认码表, # #可是使用转换流的子类FileWriter或FileReader. # ############################################## ----------------------------------------------------- 需求3: 读取一个文本文件,将文本文件的数据展现在控制台上。 分析: 源:硬盘文件。InputStream Reader。 纯文本?yes Reader。 设备:硬盘 FileReader. 缓冲?yes BufferedReader BufferedReader bufr = new BufferedReader(new FileReader("a.txt")); 目的:OutputStream Writer 纯文本?yes Writer. 设备:控制台 System.out. 发现控制台的对象是System.out.是字节输出流。 因为是纯文本数据,使用Writer所以可以将字符流转成成字节串流。 使用了转换流 OutputStreamWriter 需要高效吗?需要。 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out)); --------------------------------------------------- 需求4: 读取一个文本文件,将数据变成大写,存到一个文件中。 分析: 源?目的? 源:一个硬盘文件。就明确了要使用InputStream Reader 是纯文本的吗?是,就进一步明确了使用Reader. 什么设备:硬盘文件。在进一步明确了使用Reader体系中FileReader FileReader fr = new FileReader("a.txt"); 需要提高效率吗?需要! BufferedReader bufr = new BufferedReader(fr); 目的:一个硬盘文件。使用体系 OutputStream Writer 是纯文本吗?是,使用Writer。 目的设备:硬盘文件.使用FileWriter. FileWriter fw = new FileWriter("b.txt"); 需要高效吗?需要! BufferedWriter bufw = new BufferedWriter(fw); */
file类下的方法
public void deleteOnExit()
在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。 文件(或目录)将以与注册相反的顺序删除。调用此方
法删除已注册为删除的文件或目录无效。根据 Java 语言规范中的定义,只有在虚拟机正常终止时,才会尝试执行删除操
作。
一旦请求了删除操作,就无法取消该请求。所以应小心使用此方法。
getPath():file类中封装的是什么路径(绝对路径或相对路径)返回的就是什么路径
getAbsolutePath():无论file类中封装的什么样的路径都返回绝对路径
文件后缀过滤器:
public static void method_filter() { File dir = new File("d:\\java0217\\day02"); String[] names = dir.list(new FilenameFilter() { public boolean accept(File dir,String name) { //System.out.println(dir+"......"+name); //return true; return name.endwith(".java"); } }); for(String name: names) { System.out.println(name); } } public static void main(String[] args) { method_filter(); }
Properties
void list(PrintStream out)
将属性列表输出到指定的输出流。
void list(PrintWriter out)
将属性列表输出到指定的输出流。
prop.list(new PrintStream("sysinfo.txt"));//数据写入到文件中
prop.list(System.out);//数据写入到控制台
//演示一下load方法原理 public static void demo_load_2()throws IOException { Properties prop = new Properties(); BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("user.txt"))); String line = null; while((line=bufr.readLine())!=null) { String[] arr = line.split("="); prop.setProperty(arr[0],arr[1]); } prop.list(System.out); bufr.close(); }
注意:
#号 是配置文件的注释信息
public Object setProperty(String key, String value)
调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。强制要求为属性的键和值使用字符串。
返回值是 Hashtable 调用 put 的结果。 这个方法可以将properties类中的数据进行修改,但是不能修改配置文件的信
息,
public void store(OutputStream out, String comments) throws IOException
这个方法可以修改配置文件信息,comments为注释,可以不写
让一个对象具有比较性,要实现comparable接口,之后重写
hashcode、equals、compareTo方法。
例子: import java.io.*; import java.util.*; class Student implements Comparable<Student> { private String name; private int ma,en,cn; private int sum; Student(String name,int ma,int en,int cn) { this.name = name; this.ma = ma; this.en = en; this.cn = cn; sum = ma+en+cn; } public int hashCode() { final int NUMBER = 29; return name.hashCode()+sum*NUMBER; } public boolean equals(Object obj) { if(!(obj instanceof Student)) throw new RuntimeException("存入了非Student对象"); Student stu = (Student)obj; return this.name.equals(stu.name) && this.sum == stu.sum; } public int compareTo(Student stu) { int num = new Integer(this.sum).compareTo(new Integer(stu.sum)); return num==0?this.name.compareTo(stu.name):num; } public String getName() { return name; } public int getSum() { return sum; } }
文本键切割和合并
文件的切割与合并 import java.io.*; import java.util.*; /* */ class SplitFile { public static void main(String[] args) throws IOException { //splitFile(); merge(); } public static void merge()throws IOException { /* 获取碎片文件中配置文件的信息。 */ File dir = new File("c:\\partfiles\\"); File[] files = dir.listFiles(new FileFilter() { public boolean accept(File pathname) { return pathname.getName().endsWith(".properties"); } }); File confFile = files[0]; Properties prop = new Properties(); FileInputStream fis = new FileInputStream(confFile); prop.load(fis); String filename = prop.getProperty("filename"); int partCount = Integer.parseInt(prop.getProperty("partcount")); /* 用于合并碎片文件。 */ ArrayList<FileInputStream> al = new ArrayList<FileInputStream>(); for(int x=1; x<partCount; x++) { al.add(new FileInputStream(new File(dir,x+".mypart"))); } final Iterator<FileInputStream> it = al.iterator(); Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() { public boolean hasMoreElements() { return it.hasNext(); } public FileInputStream nextElement() { return it.next(); } }; SequenceInputStream sis = new SequenceInputStream(en); FileOutputStream fos = new FileOutputStream(new File(dir,filename)); byte[] buf = new byte[1024*4]; int len = 0; while((len=sis.read(buf))!=-1) { fos.write(buf,0,len); } fos.close(); sis.close(); /**/ } public static void splitFile()throws IOException { File file = new File("c:\\0.bmp"); File dir = new File("c:\\partfiles\\"); FileInputStream fis = new FileInputStream(file); byte[] buf = new byte[1024*1024]; int len = 0; FileOutputStream fos = null; int count = 1; while((len=fis.read(buf))!=-1) { fos = new FileOutputStream(new File(dir,(count++)+".mypart")); fos.write(buf,0,len); fos.close(); } //System.out.println("count="+count); Properties prop = new Properties(); prop.setProperty("partcount",count+""); prop.setProperty("filename",file.getName()); File confFile = new File(dir,count+".properties"); fos = new FileOutputStream(confFile); prop.store(fos,"conf"); fos.close(); fis.close(); } }
----------------------------android培训、java培训、期待与您交流!----------------------------------
发表评论
-
黑马程序员_javaweb(response)
2012-12-02 21:29 713----------------------------and ... -
黑马程序员_javaweb(servletcontext)
2012-12-02 21:21 773----------------------------and ... -
黑马程序员_交通灯系统和银行调度系统
2012-12-02 21:07 638----------------------------and ... -
黑马程序员_高新技术
2012-12-02 10:08 731----------------------------and ... -
黑马程序员_基础复习八(网络编程)
2012-11-29 23:48 850----------------------------and ... -
黑马程序员_基础复习六(集合)
2012-11-26 23:18 568----------------------------and ... -
黑马程序员_基础复习五(线程)
2012-11-25 18:17 680----------------------------and ... -
黑马程序员_基础复习四(异常)
2012-11-24 22:04 661----------------------------an ... -
黑马程序员_基础复习三(内部类、接口)
2012-11-23 08:22 715----------------------------and ... -
黑马程序员_基础复习二(面向对象、多态)
2012-11-19 21:06 518----------------------------and ... -
黑马程序员_基础复习一(数组、排序、面向对象)
2012-11-16 00:08 591----------------------------and ...
相关推荐
后端开发是一个涉及广泛技术和工具的领域,这些资源对于构建健壮、可扩展和高效的Web应用程序至关重要。以下是对后端开发资源的简要介绍: 首先,掌握一门或多门编程语言是后端开发的基础。Java、Python和Node.js是其中最受欢迎的几种。Java以其跨平台性和丰富的库而著名,Python则因其简洁的语法和广泛的应用领域而备受欢迎。Node.js则通过其基于JavaScript的单线程异步I/O模型,为Web开发提供了高性能的解决方案。 其次,数据库技术是后端开发中不可或缺的一部分。关系型数据库(如MySQL、PostgreSQL)和非关系型数据库(如MongoDB、Redis)各有其特点和应用场景。关系型数据库适合存储结构化数据,而非关系型数据库则更适合处理大量非结构化数据。 此外,Web开发框架也是后端开发的重要资源。例如,Express是一个基于Node.js的Web应用开发框架,它提供了丰富的API和中间件支持,使得开发人员能够快速地构建Web应用程序。Django则是一个用Python编写的Web应用框架,它采用了MVC的软件设计模式,使得代码结构更加清晰和易于维护。
华为数字化转型实践28个精华问答glkm.pptx
新员工入职培训全流程资料包(100+个文件) 1入职流程指引 万科新职员入职通知书 万科新职员入职引导手册 新进员工跟进管理表 新员工入职报到工作单(文职) 新员工入职报到流程 新员工入职流程表 新员工入职手续办理流程(工厂 新员工入职手续清单 新员工入职须知 新员工入职训流程 新员工入职引导表(导师用) 2 入职工具表格 3 培训方案计划 4培训管理流程 5培训教材课件 6 培训效果检测 7 员工管理制度 8 劳动合同协议 9 新员工培训PPT模板(28套)
FX5U PLC作为主、从站的通讯方式程序实例,以及包含详细说明文件...
技术需求报告-集行波测距与故障录波功能于一体的电网综合故障分析系统.docx
最新二开版本源码博客论坛源码,UI很漂亮,可切换皮肤界面.rar最新二开版本源码博客论坛源码,UI很漂亮,可切换皮肤界面.rar
2024-2030全球及中国广谱防晒霜行业研究及十五五规划分析报告
基于Qt Creator实现中国象棋人机对战, c++实现.zip
华为用“三阶段十二步”法保证业务战略引领数字化转型glkx.pptx
基于matlab实现自适应稳健波束形成对角加载算法,其与输入信噪比的关系.rar
热塑性弹性体,全球前21强生产商排名及市场份额
详见:https://blog.csdn.net/Timi2019/article/details/138357258 【项目技术】 python+Django+mysql 【实现功能】 网站前台: (1)用户可以在不登录的情况下访问本系统,但是不能进行数据的分析,也不能对自己的个人信息进行修改。 (2)用户的注册与登录:游客想要在一个网站对自己的信息进行修改的话,需要经过一系列的有验证信息的注册,成为网站的正式用户后,可以编辑或修改自己的个人信息。 (3)评论分析:用户可以在网站内对所有的评论进行查看和分析。 (4)个人信息:通过个人信息查看功能可以查看自己的个人信息,还可以对密码进行修改。 (5)系统简介:用户可以在网站的首页上查看系统的信息,如用户数量、新闻数量、评价数量等信息。 网站后台: (6)用户信息管理:管理员可以查看和维护网站内所有的用户信息,可以通过用户的编号或者用户名进行查找,查找到具体的用户后可以对用户的信息进行修改,也可以直接删除用户的信息。 (7)新闻管理模块:后台管理员可以对网站内的新闻信息进行管理
某知名大型集团信息化项目建设方案qy.pptx
基于matlab实现潮流计算程序,MATLAB潮流计算程序.rar
搭建数据分析和机器学习平台,实现如下功能:设计一个网页版的用户界面,支持从本地选取数据集、自动可视化分析、查看训练记录、查看训练模型参数和绘图和支持完成机器学习任务。核心工具:streamlit和pycaret,部署和运行方便,只需streamlit run main.py命令即可。
一种统一的单隐层的前馈网络(SLFNs)的在线序列学习算法。该算法被称为在线序极端学习机器(OS-ELM),可以学习固定或不同块大小的逐块或逐块数据)。OS-ELM中加性节点的激活函数可以是任意有界的不变分段连续函数,RBF节点的激活函数可以是任意可积的分段连续函数。在OS-ELM中,随机选择隐藏节点的参数(加性节点的输入权值和偏差或RBF节点的中心和影响因子),并根据顺序到达的数据解析确定输出权值。该算法采用了Huang等人开发的批处理学习的思想,该思想已被证明比其他批处理训练方法非常快。除了选择隐藏节点的数量外,还不需要手动选择其他控制参数。
仿我图网素材购买素材下载素材交易平台网站源码.rar仿我图网素材购买素材下载素材交易平台网站源码.rar
python tkinter
2024-2030全球与中国伊维菌素片剂市场现状及未来发展趋势
Python数据分析大作业(ARIMA 自回归积分滑动平均模型) 4000+字 图文分析文档 销售价格&库存分析+完整python代码