Java之IO流与多线程
光环大数据的大数据培训大数据课程分为13大阶段90大模块课程+6大企业真实项目实战,每个阶段都有实力案例和项目结合,从简单到专业一步一步带领学生走进大数据开发的世界,帮助学生顺利走上大数据工程师的道路!
Java作为大数据培训课程的技术基础,也是其中重要的课程之一,我们先来了解下。
一、IO流的分类
1.按流向不同:输入流、输出流(以程序为主体)
2.按数据不同:字节流、字符流(字节流操作非文本文件.jpg.avi.rmvb.mp3字符流操作文本本件.txt.java)
3.按角色不同:节点流、处理流
二、IO流的结构体系
抽象基类节点流缓冲流(处理流的一种)
InputStreamFileInputStreamBufferedInputStream
OutputStreamFileOutputStreamBufferedOutputStream(flush()-用于清空缓冲区)
ReaderFileReaderBufferedReader(readLine())
WriterFileWriterBufferedWriter(newLine())
//使用缓冲流完成文件的复制
publicstaticvoidcopyFile(Stringsrc,Stringdest){
//2.创建缓冲流对象(BufferedInputStream),包装现有节点流
BufferedInputStreambis=null;
//4.创建缓冲流对象(BufferedOutputStream),包装现有节点流
BufferedOutputStreambos=null;
try{
//1.创建FileInputStream对象,同时打开指定文件
FileInputStreamfis=newFileInputStream(src);
bis=newBufferedInputStream(fis);
//3.创建FileOutputStream对象,同时打开指定文件
FileOutputStreamfos=newFileOutputStream(dest);
bos=newBufferedOutputStream(fos);
//5.使用缓冲流读取指定文件的内容
byte[]b=newbyte[1024];
intlen=0;
while((len=bis.read(b))!=-1){
//6.使用缓冲流将读取的内容写到目标文件
bos.write(b,0,len);
}
//bos.flush();//用于强制清空缓冲区
}catch(IOExceptione){
e.printStackTrace();
}finally{
//7.关闭流
if(bos!=null){
try{
bos.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
if(bis!=null){
try{
bis.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
三、对象流:ObjectInputStream&ObjectOutputStream
序列化:将内存中的对象永久的以二进制形式保存到磁盘中
①创建节点流对象
②使用缓冲流包装节点流(可选的)
③使用对象流包装缓冲流对象
④进行序列化操作
⑤关闭流
⑥需要序列化对象所属的类需要实现java.io.Serializable接口
⑦提供一个序列号privatestaticfinallongserialVersionUID=1234256L;
注意:static和transient修饰的属性不能被序列化
//对象的序列化
@Test
publicvoidtest3(){
Personp1=newPerson("张三",18,newComputer(),"唐朝");
Personp2=newPerson("李四",28,newComputer(),"唐朝");
Personp3=newPerson("王五",25,newComputer(),"唐朝");
ObjectOutputStreamoos=null;
try{
FileOutputStreamfos=newFileOutputStream("person.dat");
BufferedOutputStreambos=newBufferedOutputStream(fos);
oos=newObjectOutputStream(bos);
oos.writeObject(p1);
oos.writeObject(p2);
oos.writeObject(p3);
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(oos!=null){
try{
oos.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
反序列化:将磁盘中的对象读取
//对象的反序列化
@Test
publicvoidtest4(){
ObjectInputStreamois=null;
try{
FileInputStreamfis=newFileInputStream("person.dat");
BufferedInputStreambis=newBufferedInputStream(fis);
ois=newObjectInputStream(bis);
Personp1=(Person)ois.readObject();
Personp2=(Person)ois.readObject();
Personp3=(Person)ois.readObject();
System.out.println(p1);
System.out.println(p2);
System.out.println(p3);
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(ois!=null){
try{
ois.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
四、控制台IO:
System.in:“标准”的输入流
System.out:“标准”的输出流----通过System类中setOut()方法可以改变println()的默认输出位置
System.err:“标准”的错误输出流
打印流:PrintStream&PrintWriter
五、转换流:InputStreamReader&OutputStreamWriter
@Test
publicvoidtest1(){
BufferedReaderbr=null;
try{
InputStreamin=System.in;
InputStreamReaderisr=newInputStreamReader(in);
br=newBufferedReader(isr);
Stringstr=null;
while((str=br.readLine())!=null){
System.out.println("--"+str);
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(br!=null){
try{
br.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
七、其他IO流
数据流:DataInputStream&DataOutputStream
随即存取文件流:RandomAccessFile
>seek(longl)
>getFilePointer();
八、java.io.File类:用于表示文件/目录。可用于新建、删除、重命名等基本功能的操作
但是若需要操作文件的内容,File就无能为力,需要使用IO流
通常File对象与IO流配合使用
访问文件名:
getName()
getPath()
getAbsoluteFile()
getAbsolutePath()
getParent()
renameTo(FilenewName)
文件检测
exists()
canWrite()
canRead()
isFile()
isDirectory()
获取常规文件信息
lastModified()
length()
文件操作相关
createNewFile()
delete()
目录操作相关
mkDir()
mkDirs()
list()
listFiles()
大数据培训,就选光环大数据!
原创文章,转载请注明出处:光环大数据http://hadoop.aura.cn
大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 更多问题咨询,欢迎点击------>>>>在线客服!