java中集合输入输出流线程重难点总结.docx
- 文档编号:28587809
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:64
- 大小:47.31KB
java中集合输入输出流线程重难点总结.docx
《java中集合输入输出流线程重难点总结.docx》由会员分享,可在线阅读,更多相关《java中集合输入输出流线程重难点总结.docx(64页珍藏版)》请在冰豆网上搜索。
java中集合输入输出流线程重难点总结
第十章注意点:
1.集合的定义:
集合(Collection)即容器(Container),是用来存放数据的盒子。
java中提供了很多的集合类
2.集合的特点:
a.集合类中只容纳对象名(指向对象的指针(地址))
b.集合类中容纳的元素都是object类型,一旦把一个对象置入集合类,它的类型将丢失
c.集合类的大小可改变
注意:
数组是有固定长度的,在定义数组的时候,就需要确定这个数组的大小,但是很多时候我们不能确定需要存放多少元素,这时就需要使用集合类
3.变量、数组和集合的区别
变量:
只能存放一个数据
数组:
a.可以存放多个数据,数据必须是同一类型
b.数组大小固定,不能改变
集合:
a.可以存放多个数据,数据可以是不同类型
b.集合大小可以动态增长
4.java集合体系结构
java集合结构有两颗接口树构成:
第一棵树根节点为Collection接口,它定义了所有的集合的基本操作,如添加、删除、遍历等,它的子接口Set、List等则提供了更加特殊的功能
第二棵树根节点为Map接口。
与哈希表类似,保存的事键值对的集合,可以通过键来实现对值元素的访问
5.迭代器Iterator
定义:
迭代器是按次序一个一个地获取集合中的所有的对象,是访问集合中的每一个元素的标准机制
迭代器的创建:
//将test集合对象转为迭代器
Iteratorit=test.iterator();
迭代器的常用方法:
hasNext()//判断迭代器中是否有下一个元素,如果有返回true,没有返回false
next()//返回迭代的下一个元素
6.泛型的理解
泛型:
即参数化类型,即所操作的数据类型被指定为一个参数
泛型可以用在类、接口、方法的创建中,分别称为泛型类、泛型接口和泛型方法
泛型的引入背景:
java集合中存在的问题:
javaSE1.4和更早版本的集合有一个共同缺点:
一旦将某个对象添加到其中,该对象便失去了其原有的类型信息,集合所容纳的元素其实只是一些指向Object对象的引用。
所以,从容器中取出的元素都变成了Object类型。
实例如下:
ListstuList1=newArrayList();
stuList1.add(newStudent("张三","200080001"));
stuList1.add(newStudent("李四","200080002"));
Students1=(Student)stuList.get(0);//需要强制转换(特别注意这里必须强制转换)
Stringnm=s1.getName();
Stringno=s1.getNumber();
该例子使用泛型改写如下:
List
stuList1.add(newStudent("张三","200080001"));
stuList1.add(newStudent("李四","200080002"));
Students1=stuList1.get(0);//不需要强制转换(这也是使用泛型的好处)
Stringnm=s1.getName();
Stringno=s1.getNumber();
第十一章:
输入输出流
如上所示:
将时间的输出格式按照自己定义的格式输出
具体实例如下:
packageshurushuchu;
importjava.io.File;
importjava.util.Date;
importjava.text.SimpleDateFormat;
publicclassFileTest3{
publicstaticvoidmain(String[]args){
//新建代表目录的file对象
Filef=newFile("D:
\\有用软件");
if(f.exists()){
//获取一个目录下的所有的目录的文件,并将其保存在字符串数组names中
String[]names=f.list();
//增强型的for循环
for(Stringname:
names){
//file的构造方法,File(Stringparent,Stringchild)
//其中parent-代表父路径名字符串,child-子路径名字符串
Filef1=newFile(f,name);
//获取最后修改时间
longt=f1.lastModified();
//新建Date类的对象代表时间
Datedate=newDate(t);
//创建SimpleDateFormat对象构造方法设置时间显示格式如图所示,用来设置日期和时间格式
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
//格式化,即将时间按我们在构造方法中定义的格式输出
Stringt1=sdf.format(date);
//判断f路径下的对象是否为文件
if(f1.isFile()){
System.out.println("这是一个文件"+name+"最后修改时间:
"+t1);
}else{
System.out.println("知识一个文件"+name+"最后修改时间:
"+t1);
}}}}
1.基本概念的理解
File代表的是文件和目录
2流的分类
-按流的方向
输入流
输出流
-按处理数据的单位不同
字节流(8位一个字节)
字符流(16位两个字节)
-按基本功能分
节点流
处理流
3.流的分类
字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter
4..InputStream的read方法是从输入流中读取下一个数据字节
OutputStream的writer方法是将指定的字节写入此输出流
1.增强型for循环的更深理解
2.Collection接口,collections类
且collection类中的方法均为静态方法
3.File类的使用
实例如下:
packageshurushuchu;
importjava.io.File;
publicclassFileTest2{
publicstaticvoidmain(String[]args){
//新建代表目录的file对象
Filef=newFile("D:
\\有用软件");
if(f.exists()){
//获取一个目录下的所有的目录的文件,并将其保存在字符串数组names中
String[]names=f.list();
//增强型的for循环
for(Stringname:
names){
//file的构造方法,File(Stringparent,Stringchild)
//其中parent-代表父路径名字符串,child-子路径名字符串
Filef1=newFile(f,name);
//判断f路径下的对象是否为文件
if(f1.isFile()){
System.out.println("这是一个文件"+name+"最后修改时间:
"+f1.lastModified());
}else{
System.out.println("知识一个文件"+name+"最后修改时间:
"+f1.lastModified());
}
}
}
}
}
此处打出的时间格式并非我们常用的格式,那么如何将时间的格式改为我们常用的格式呢?
要改则需要使用SimpleDateFromat类
修改代码如下:
packageshurushuchu;
importjava.io.File;
importjava.util.Date;
importjava.text.SimpleDateFormat;
publicclassFileTest3{
publicstaticvoidmain(String[]args){
//新建代表目录的file对象
Filef=newFile("D:
\\有用软件");
if(f.exists()){
//获取一个目录下的所有的目录的文件,并将其保存在字符串数组names中
String[]names=f.list();
//增强型的for循环
for(Stringname:
names){
//file的构造方法,File(Stringparent,Stringchild)
//其中parent-代表父路径名字符串,child-子路径名字符串
Filef1=newFile(f,name);
//获取最后修改时间
longt=f1.lastModified();
//新建Date类的对象代表时间
Datedate=newDate(t);
//创建SimpleDateFormat对象,用来设置日期和时间格式
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
//格式化,即将时间按我们在构造方法中定义的格式输出
Stringt1=sdf.format(date);
//判断f路径下的对象是否为文件
if(f1.isFile()){
System.out.println("这是一个文件"+name+"最后修改时间:
"+t1);
}else{
System.out.println("知识一个文件"+name+"最后修改时间:
"+t1);
}
}
}
}
}
4.File类的常用方法的使用
实例如下:
packageshurushuchu;
importjava.io.File;
importjava.io.IOException;
publicclassFileTest1{
publicstaticvoidmain(String[]args){
//新建一个File类的对象,f表示文件d:
/a.txt
Filef=newFile("d:
/a.txt");
//由于Create方法抛出异常故要处理异常
try{
if(!
f.exists()){
f.createNewFile();
System.out.println("创建文件成功!
");
}
}catch(IOExceptione){
System.out.println(e.getMessage());
}
//新建指定路径的目录,ml表示多重目录d:
/a/b/c,ml1表示单重目录d:
/ml
Fileml=newFile("d:
/a/b/c");
Fileml1=newFile("d:
/ml");
//创建多重目录
ml.mkdirs();
//创建单重目录
ml1.mkdir();
if(ml.exists()){
//多重目录的删除只能删除最里面的目录
ml.delete();
System.out.println("删除目录成功!
");
}
//判断该目录是否存在
if(ml1.exists()){
ml1.delete();
System.out.println("删除目录成功!
");
}
//新建File对象mul2代表D:
\\C语言目录
Filemul2=newFile("D:
\\C语言");
//list方法获得(D:
\\C语言)目录下的文件和目录,并将其存放在字符串数组c中
String[]names=mul2.list();
//使用增强型的for循环
for(Stringname:
names){
//新建使用父目录和子字符串构造方法
Filef1=newFile(mul2,name);
//判断该对象是否为文件
if(f1.isFile()){
System.out.println("这是一个文件:
"+f1.getName());
}
//判断该对象是否为目录
if(f1.isDirectory()){
//getName()获取文件或目录的名称
//getParent方法返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
System.out.println("这是一个目录:
"+f1.getName()+"\t"+f1.getParent());
}
}
}
}
5.FileInputStream类的使用
packageshurushuchu;
importjava.io.InputStream;
importjava.io.FileInputStream;
publicclassFileInputStreamTest{
publicstaticvoidmain(String[]args){
try{
//父类的引用指向子类的对象
InputStreamis=newFileInputStream("D:
\\迅博学习笔记\\java学习笔记\\第八章接口\\接口重难点和注意点.txt");
//read方法返回的是下一个字节
intch=is.read();
//由于read方法是当文件到达末尾是返回-1,即
while(ch!
=-1){
System.out.print((char)ch);
ch=is.read();
}
is.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
//由于获取是一个一个字节获取,而一个汉字有两个字节,故如果有汉字则会出现错误
6.FileInputStream类的更深理解
作用:
读取指定的文件
packageshurushuchu;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.FileInputStream;
publicclassFileinputStream{
publicstaticvoidmain(String[]args){
//由于FileInputStream构造函数抛出一个异常,故需要对异常进行处理
try{
InputStreamis=newFileInputStream("D:
\\迅博学习笔记\\java学习笔记\\第九章异常\\注意点.txt");
//由于read方法的返回值为int型,该方法的作用是从此输入流中读取一个数据字节
//所以若读取的文件中含有汉字则会出现乱码,由于一个汉字占两个字节
intch=is.read();
while(ch!
=-1){
System.out.print((char)ch);
//此句很关键
ch=is.read();
}
//特别注意最后要关闭流
is.close();
}
catch(FileNotFoundExceptione1){
e1.getStackTrace();
}catch(IOExceptione){
e.getStackTrace();
}
}
}
注意点:
如果文件中有汉字则上面的方法读取会出现乱码,解决方案如下:
//以下方法可以解决如果文件中有汉字时出现乱码的问题,以此方法若有汉字不会出现乱码
packageshurushuchu;
importjava.io.InputStream;
importjava.io.FileInputStream;
publicclassFileInputStreamTest2{
publicstaticvoidmain(String[]args){
try{
//新创建FileInputStream对象
InputStreamf=newFileInputStream("D:
\\迅博学习笔记\\java学习笔记\\第八章接口\\接口重难点和注意点.txt");
//创建数组保存读取的字节
byte[]b=newbyte[1024];
//读取数据
intch=f.read(b);
if(ch!
=-1){
//使用字符串publicString(byte[]bytes,intoffset,intlength)构造方法,返回值为String类型
System.out.println(newString(b,0,ch));
}
f.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
7.FileReader类的使用
注意FileReader类和FileOutputStream类的区别
字节流字符流
InputStreamReader
OutputStreamWriter
即FileReader读取的是一个字符,FileOutputStream读取的是一个字节
则可以使用该类解决一下读取汉字时的乱码问题,具体的实现方法如下:
packageshurushuchu;
importjava.io.IOException;
importjava.io.FileNotFoundException;
importjava.io.Reader;
importjava.io.FileReader;
publicclassFileReaderTest{
publicstaticvoidmain(String[]args){
try{
Readerdq=newFileReader("D:
\\迅博学习笔记\\java学习笔记\\第八章接口\\接口重难点和注意点.txt");
//FileReader类的read方法是读取的一个字符,read方法返回的是作为整数读取的字符
inta=dq.read();
while(a!
=-1){
System.out.print((char)a);//将整数a强制转化为字符
a=dq.read();
}
dq.close();
}catch(FileNotFoundExceptione1){
e1.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
此程序的关键在于FileReader类的read方法读取的是一个字符,读取汉字时不会出现乱码
8.FileOutputStream类的使用方法
作用:
向文件中写入数据
实例如下:
//FileOutputStream类的使用
packageshurushuchu;
importjava.io.OutputStream;
importjava.io.FileOutputStream;
publicclassFileOutStreamTest{
publicstaticvoidmain(String[]args){
Stringstr1="相信自己,最后的胜利将属于我";
try{
OutputStreamos=newFileOutputStream("D:
\\a\\b\\a.txt");
//write(byte[])将指定字节写入此文件输出流,str1.getBytes()返回值为一个字节数组
os.write(str1.getBytes());
System.out.println("写入数据成功!
");
os.close();
}
catch(Exceptione){
e.printStackTrace();
}
}
}
9.输入输出流同时使用的实例
实例如下;
packageshurushuchu;
importjava.io.InputStream;
importjava.io.FileInputStream;
importjava.io.OutputStream;
importjava.io.FileOutputStream;
publicclassFoFosTest{
publicstaticvoidmain(String[]args){
try{
//创建输入流读取图像
InputStreamis=newFileInputStream("E:
/win7/004423c5uflfl12bq3f39c.png");
//创建输出流往文件中写入数据
OutputStreamos=newFileOutputStream("D:
/a/b/a.txt");
//为字节数组分配存储空间
byte[]b=newbyte[1024];
//读取图片数据并
intlen=is.read(b);
while(len!
=-1){
//输出流写入数据到指定的文件中
os.write(b,0,len);
len=is.read(b);
}
//关闭输入流输出流
is.close();
os.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
10.FileOutputStream类的构造方法
使用实例:
//FileOutputStream类的使用
packageshurushuchu;
importjava.io.File;
importjava.io.IOException;
importjava.io.OutputStream;
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 中集 输入输出 流线 难点 总结