学习大数据,所必需的java基础(7)

2024-03-04 12:44
文章标签 java 基础 数据 学习 必需

本文主要是介绍学习大数据,所必需的java基础(7),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • File类
    • File 的静态成员
    • File的构造方法
    • File的获取方法
    • 相对路径和绝对路径
    • File的创建方法
    • File类中的删除方法
    • File的遍历方法
  • 字节流
    • IO流介绍以及输入输出以及流向的介绍
    • IO流的流向
    • IO流分类
    • IO流分类 OutputStream中的子类FileOutoutStream的介绍以及方法的简单介绍
    • InputStream子类[fileInputStream]的介绍以及方法的使用
    • 一次读取一个字节
    • 一次读取一个字节数组
    • 字节流实现图片复制代码实现
  • 字符流
    • 字节读取中文的问题
    • FileReader的介绍以及使用
    • FileWriter的介绍以及使用
    • FileWriter的刷新功能和关闭功能
    • IO异常处理的方式
  • 字节缓冲流

File类

计算机常识:
1.什么叫做文本文档
能够记事本打开,人能看懂的文件:txt,java,html
2.电脑硬盘上存储的东西由什么构成:文件和文件夹
3.以.jpg结尾一定是图片吗? 不一定
4.E:\Idea\io\1.jpg其中1.jpg的父路径 E:\Idea\io
5.路径分割符(一个路径和其他路径之间的分隔符):路径名称分割符(一个路径中文件夹和文件夹名称或者文件名称之间的分隔符)
6.IO流中的英语单词
文件 file
文件夹:directory
输出:output
输入:input
写: write
读:read
file类概述:文件和目录路径名的抽象表示形式
简单理解:创建file对象,知名要操作的文件或者文件夹的路径
就可以根据路径找到该文件夹或者文件,就可以调用file中的方法,去操作文件或者文件夹

File 的静态成员

static String pathSeparator:与系统有关的路径分隔符
static String separator:与系统有关的默认名称分隔符

public class test04_file {public static void main(String[] args) {//与系统有关的路径分隔符File.pathSeparatorSystem.out.println(File.pathSeparator);//与系统有古纳的默认路径分隔符System.out.println(File.separator);}
}

如何用字符串正确的描述一个文件的路径

import java.io.File;public class test05 {public static void main(String[] args) {String path1 = "E:\\abc\\hh\\hhe";System.out.println(path1);/** 将来写代码要做到:一次编写,到处运行* 开发用这种方式* 练习时可以写死* */String path2 = "E:" + File.separator + "abc" + File.separator + "hhe";System.out.println(path2);}
}

File的构造方法

File(String parent, String child) -> 根据所填写的路径创建File对象
parent:父路径
child:子路径
File(File parent, String child) -> 根据所填写的路径创建File对象
parent:父路径->File对象
child:子路径
File(String pathname) -> 根据所填写的路径创建File对象
字符串的路径

public class test06 {public static void main(String[] args) {
//        File(String parent, String child) -> 根据所填写的路径创建File对象
//        parent:父路径
//        child:子路径File file1 = new File("E:\\Idea\\io","1.jpg");System.out.println(file1);
//        File(File parent, String child) -> 根据所填写的路径创建File对象
//        parent:父路径->File对象
//        child:子路径final File parent = new File("E:\\Idea\\io");final File file2 = new File(parent + "1.jpg");System.out.println(file2);
//        File(String pathname) -> 根据所填写的路径创建File对象
//                字符串的路径final File file = new File("E:\\Idea\\io2");System.out.println(file);}
}

创建FIle对象时指定的路径可以不存在,但是写不存在的路径没什么意义

File的获取方法

  • public String getAbsolutePath() :返回此File的绝对路径名字符串。->带盘符的路径
  • public String getPath() :将此File转换为路径名字符串。-> 获取的是File的封装路径
    new File的时候,传递的是啥路径,getPath方法就获取的是啥路径
  • public String getName() :返回由此File表示的文件或目录的名称。
  • public long length() :返回由此File表示的文件的长度。->文件的字节数
  • public File getParentFile()返回由此File表示的文件或目录的父目录,如果没有父目录,返回null。
public class test07 {public static void main(String[] args) {final File file = new File("E:\\idea\\io\\li.jpg");
//        - public String getAbsolutePath() :返回此File的绝对路径名字符串。->带盘符的路径final File absoluteFile = file.getAbsoluteFile();System.out.println(absoluteFile);
//        - public String getPath() :将此File转换为路径名字符串。-> 获取的是File的封装路径
//        new File的时候,传递的是啥路径,getPath方法就获取的是啥路径System.out.println(file.getPath());
//        - public String getName()  :返回由此File表示的文件或目录的名称。System.out.println(file.getName());
//        - public long length()  :返回由此File表示的文件的长度。->文件的字节数System.out.println(file.length());
//        - public File getParentFile()返回由此File表示的文件或目录的父目录,如果没有父目录,返回null。System.out.println(file.getParentFile());}
}

相对路径和绝对路径

1.绝对路径:从网符开始写的路径 ---- 如果跨盘符访问
2.相对路径:不从盘符开始写 — 同一个盘符中访问

3.在idea中相对路径怎么写
a.需要先找一个参照路径:当前project的绝对路径
b.谁是参照路径,就可以省略谁,剩下的就是相对类路径的写法
4.比如:day18 map这个模块下有一个io文件夹,io文件夹下有一个1.txrt,1.txt的相对路径咋写
a.找绝对路径:E:\Idea\idea2019\workspace\220905_bigdata\day18_map\io\1.txt
b.找参照路径:E:\Idea\idea2019\workspace\220905_bigdata
c.将参照路径干掉: day18_map\io\1.txt
说白了就是从模块名开始写
5.注意
如果相对路径不写module名称,那么默认位置在当前projrct下,不在moudle下了

File的创建方法

boolean createNewFile() -> 创建新文件
如果指定的文件之前有,创建失败,返回false
如果指定的文件之前没有,创建成功,返回true
boolean mkdirs() -> 既可以创建单级文件夹,还可以创建多级文件夹
如果指定的文件夹之前有,创建失败,返回false
如果指定的文件夹之前没有,创建成功,返回true

public class test08 {public static void main(String[] args) throws IOException {final File file = new File("D:\\1.txt");//创建新文件,如果之前有则返回false,没有返回trueSystem.out.println(file.createNewFile());//boolean mkdits  既可以创建单级文件夹,还可以创建多级文件夹//如果之前存在则返回false创建失败,否则返回true、final File file1 = new File("D:\\Ajava\\exc");System.out.println(file1.mkdirs());}
}

File类中的删除方法

boolean delete() 删除文件或者文件夹 ---- 不走回收站
注意 删除文件夹时,要求文件夹是空的

        final File file = new File("D:\\1.txt");System.out.println(file.delete());

File的遍历方法

1.String[] list() ---- 遍历指定的文件夹,返回的是String数组
2.File[] listFiles() ----- 遍历指定的文件夹,返回的是file数组
listFiles() 方法底层是list() 将list方法获取到的文件或者文件夹封装到FIle对象中,再将对象放到file数组中,最终返回file数组

public class test09 {public static void main(String[] args) {final File file = new File("D:\\A3驱动");//遍历指定的文件夹,返回的是String的数组
/*        String[] list = file.list();for (String s : list) {System.out.println(s);}*///遍历指定的文件夹,返回的是file数组File[] files = file.listFiles();for (File file1 : files) {System.out.println(files);}}
}

字节流

IO流介绍以及输入输出以及流向的介绍

  1. I:Input 输入
    O:Output 输出
  2. IO流:将一个数据从一个设备上传输的到另一个设备上的技术
  3. 为啥要学IO流?
    之前我们学过数组和集合,用于存储数据,但是数组和集合都是临时存储的,后面我们要用数据的话,就没了
    所以我们就想,将数据永久保存起来,可以保存到硬盘的文件中
    而我们学的IO流可以将数据保存到硬盘上的文件中,后续使用的话可以从文件中读出来使用

IO流的流向

1.输出:将数据从内存中写到硬盘上 ----- write
2.输入:将数据从硬盘上读到内存中 ----- read

IO流分类

1.字节流:一切皆字节,万能流
字节输出流:OutputStream 父类
字节输入流:InputStream 父类
2.字符流: 专门操作文本文档的
a.文本文档:用记事本打开,人能够看懂的文档
字符输出流:Writer 父类
字节输入流:Reader 父类
3.我们将要学以下几个流:
FileOutputStream//字节输出流
FileInputStream//字节输入流
FileWriter//字符输出流
FileReader//字符输入流
BufferedOutputStream//字节缓冲输出
BufferedInputStream//字节缓冲输入
BufferedWriter//字符缓冲输出
BufferedReader//字符缓冲输入
OutputStreamWriter
InputStreamReader
PrintStream
ObjectOutputStream
ObjectInputStream
扩展:Commons-IO

IO流分类 OutputStream中的子类FileOutoutStream的介绍以及方法的简单介绍

1.概述:OutputStream(抽象类)
2.子类:FileOutputStream输出流对象
3.作用:将数据从内存中写到硬盘上
4.构造:
FileOutputStream(File path)
FileOutput(String path)
5.方法
void write(int b) 一次写一个字节
void write(byte[] b) 一次写一个字节数组
void write(byte[] b, int off, int len)一次写一个字节数组一部分
b:要操作的数组
off:从数组的哪个索引位置开始写
len:写多少个
void close()->关流
6.注意:如果指定的文件不存在,输出流会自动创建

public class test10 {public static void main(String[] args) throws IOException {final File file = new File("D:\\Ajava\\output.txt");final FileOutputStream fileOutputStream = new FileOutputStream(file);//一次写一个字节fileOutputStream.write(98);//fileOutputStream.close();//一次写一个字节数组byte[] bytes = {97,98,99,100};fileOutputStream.write(bytes);//fileOutputStream.close();//一次写一个数组的一部分,从哪一个开始写,写多长fileOutputStream.write(bytes,2,2);//fileOutputStream.close();//写中文fileOutputStream.write("李云龙".getBytes(StandardCharsets.UTF_8));fileOutputStream.close();}
}

1.注意:FileOutputStream默认情况下,每次运行都会创建一个新的文件
覆盖老文件,然后将在写入的内容放到新文件中
2.续写追加
FileOutputStream(String name, boolean append) append:true 则不会副高老文件,会继续直接续写追加的内容
3.换行
\r \n window系统换行符

public class test01 {public static void main(String[] args) throws IOException {final File file = new File("D:\\Ajava\\output1.txt");final FileOutputStream fileOutputStream = new FileOutputStream(file);fileOutputStream.write("古藤老树昏鸦,\r\n".getBytes(StandardCharsets.UTF_8));fileOutputStream.write("小桥流水人家,\r\n".getBytes(StandardCharsets.UTF_8));fileOutputStream.write("古道西风瘦马,\r\n".getBytes(StandardCharsets.UTF_8));fileOutputStream.write("夕阳西下,断肠人在天涯!\r\n".getBytes(StandardCharsets.UTF_8));fileOutputStream.close();}
}

InputStream子类[fileInputStream]的介绍以及方法的使用

1.概述 InputStream 抽象类
2.子类 FileInputStream
3.作用 将数据从硬盘上读到内存中
4.构造:
FileInputStream(File file)
FileInputStream(String path)
5.方法:
int read() ----- 一次读取一个字节,返回的是读取的那个字节
int read(byte[] b) 一次读取一个字节数组,返回的是读取的个数
int read(byte[] b, int off, int len) 一次读取一个字节数组一部分,返回的是读取的个数
b:要读取的数组
off 从数组数组的哪个字节开始读
len:读多少个
void close() 关流

一次读取一个字节

public class test02 {public static void main(String[] args) throws IOException {final File file = new File("D:\\Ajava\\output.txt");final FileInputStream fileInputStream = new FileInputStream(file);int read01 = fileInputStream.read();System.out.println("read01 = " + read01);int read02 = fileInputStream.read();System.out.println("read01 = " + read02);int read03 = fileInputStream.read();System.out.println("read01 = " + read03);int read04 = fileInputStream.read();System.out.println("read01 = " + read04);int a ;while ((a = fileInputStream.read())!=-1){System.out.println(a);}fileInputStream.close();}
}

注意:
1.不要判断的时候read一次,输出的时候再read一次,否则输出结果会跳着输出
2.不要读完之后,再重新读了,因为读不出来了
3.如果流被关闭了,流就不能再使用了

一次读取一个字节数组

int read(byte[] b)一次读取一个字节数组,返回的是读取的个数
首先定义一个数组,此数组是一个临时存储空间,读取的内容先保存到数组中,从数组中获取
将来我们不知道文件中存储了多少内容,所以byte数组长度无法定义
所以我们一般长度都指定1024或者其倍数

public class test03 {public static void main(String[] args) throws IOException {final File file = new File("D:\\Ajava\\output.txt");final FileInputStream fileInputStream = new FileInputStream(file);//注意数组长度为几,就读取几个byte[] bytes =new byte[4];//System.out.println("fileInputStream.read() = " + fileInputStream.read());//int read() 返回的是读取的个数int num = fileInputStream.read(bytes);System.out.println(num);//读取数组中的内容System.out.println(new String(bytes,0,num));int len;while ((len = fileInputStream.read(bytes))!=-1){System.out.println(new String(bytes,0,len));}fileInputStream.close();}
}

字节流实现图片复制代码实现

public class test04 {public static void main(String[] args) throws IOException {final File file = new File("C:\\Users\\94863\\Pictures\\Saved Pictures\\huahua.jpg");final File file1 = new File("C:\\Users\\94863\\Pictures\\Saved Pictures\\xiaohua.jpg");final FileInputStream fileInputStream = new FileInputStream(file);final FileOutputStream fileOutputStream = new FileOutputStream(file1);final byte[] bytes = new byte[1024];//final int read = fileInputStream.read(bytes);int read;//边读边写while ((read = fileInputStream.read(bytes))!=-1){fileOutputStream.write(bytes,0,read);}//关流fileInputStream.close();fileOutputStream.close();}
}

字符流

字节读取中文的问题

1.中文在不同的编码表中,所在字节不一样
GBK:一个中文占两个字节
UTF-8:一个中文占3个字节
2.注意:
字节流确实是万能的(万能流侧重值得是文件复制),但是不要边读边看(边读边输出)

FileReader的介绍以及使用

字符流:主要操作文本文档 ---- Reader抽象类
子类:FileReader
作用:读文本文档中的内容
构造:
FileReader(File file)
FileReader(String path)
方法
int read() --------- 一次读取一个字符,返回的是字符编码
int read(char[] cbuf) ---------- 一次读取一个字符数组,返回读取的个数
int read(char[] cbuf, int off, int len) ------ 一次读取一个字符数组一部分,返回读取的个数
void close — 关流

public class test05 {public static void main(String[] args) throws IOException {final File file = new File("D:\\Ajava\\output1.txt");final FileReader fileReader = new FileReader(file);System.out.println((char) fileReader.read());System.out.println((char) fileReader.read());System.out.println((char) fileReader.read());System.out.println((char) fileReader.read());int char1;while((char1 = fileReader.read())!=-1){System.out.print((char) char1);}fileReader.close();}
}
public class test06 {public static void main(String[] args) throws IOException {final File file = new File("D:\\Ajava\\output1.txt");final FileReader fileReader = new FileReader(file);char[] chars = new char[2];int len;while ((len = fileReader.read(chars))!=-1){System.out.println(new String(chars,0,len));}}
}

FileWriter的介绍以及使用

1.字符输出流:Write(抽象类)
2.子类 FileWriter ---- 指定的文件如果不存在,自动创建
3.作用 将数据从内存中写到硬盘上
4.构造
FileWriter(File file)
FileWriter(String path)
FileWriter(String path, boolean append) ----- 追加续写
5.方法
void write(int c)
void write(char[] cbuf)
void write(char[] cbuf, int off, int len)
void write(String str)
void close()
void flush() -> 将数据从缓冲区中刷新到文件中
6.注意:
字符输出流底层自带缓冲区,我们要写的数据需要先存到缓冲区,然后再从缓冲区中将数据刷到文件中

public class test08 {public static void main(String[] args) throws IOException {final File file = new File("D:\\Ajava\\writer.txt");final FileWriter fileWriter = new FileWriter(file);fileWriter.write("两只黄鹂鸣翠");fileWriter.flush();fileWriter.close();method();}public static void method() throws IOException {final File file = new File("D:\\Ajava\\writer1.txt");//在源文件后面追加final FileWriter fileWriter = new FileWriter(file,true);fileWriter.write("两只黄鹂鸣翠柳");fileWriter.write("\r\n");fileWriter.write("一行白鹭上青天");fileWriter.close();}
}

FileWriter的刷新功能和关闭功能

flush() 只有刷新效果,但是关闭不了流对象,如果使用FileWriter写数据,但是不想关闭流,只需要调用flush
close() 先刷新,后关闭,如果想直接关闭,直接close即可

IO异常处理的方式

相应的代码块

public class text09 {public static void main(String[] args) {FileWriter fw = null;try {fw =new FileWriter("D:\\Ajava\\wri.txt");fw.write("123");} catch (IOException e) {e.printStackTrace();}finally {/** 如果fw不等于null,证明new出来了* 所以我们需要close* 否则就不用关了* */}if (fw!=null){try {fw.close();} catch (IOException e) {e.printStackTrace();}}}
}

字节缓冲流

缓冲流和突通流有啥区别
1.缓冲流自带缓冲区(长度为8192的数组),读写的数据都会进入到缓冲区中,读写操作时缓冲区之间读写
2.缓冲流都是缓冲区之间的读和写,也就是说读写操作是在内存中完成的,而普通流读写都是直接和系统打交道的
所以缓冲流读写操作要比普通流要快
3.普通流读写操作read和write方法本地方法

为啥要学缓冲流:读写速度快 (读和写是在内存中完成的,还不是本地方法)

1.BufferedOutputStream — 字节缓冲输出流
BufferedOutputStream(OutputStream out) OutputStream — 抽象类,传递子类对象FileOutStream
2.BufferedInputStream(InputStream in) InputStream ---- 抽象类,传递子类对象FileInputStream

3.用法和FileOutStream以及FileInputStream一模一样

我们通过将图片移动到另一个为位置来比较普通流和缓冲流之间的运行速递
相关代码

public class test10 {public static void main(String[] args) throws IOException {//method();method01();}public static void method() throws IOException {final long start = System.currentTimeMillis();final File file = new File("C:\\Users\\94863\\Pictures\\Saved Pictures\\huahua.jpg");final File file1 = new File("C:\\Users\\94863\\Pictures\\Camera Roll\\huahua.jpg");final FileInputStream fileInputStream = new FileInputStream(file);final FileOutputStream fileOutputStream = new FileOutputStream(file1);byte[] bytes = new byte[1024];int num;while ((num = fileInputStream.read(bytes))!= -1){fileOutputStream.write(bytes,0,num);}final long end = System.currentTimeMillis();System.out.println(end-start);fileInputStream.close();fileOutputStream.close();}public static void method01() throws IOException {long start = System.currentTimeMillis();final File file = new File("C:\\Users\\94863\\Pictures\\Saved Pictures\\huahua.jpg");final File file1 = new File("C:\\Users\\94863\\Pictures\\Camera Roll\\huahua.jpg");//1。创建一个FileInputStream用于读取本地上的照片final FileInputStream fileInputStream = new FileInputStream(file);final BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);//创建一个FileOutputStream用于将本地上的图片写到指定的位置final FileOutputStream fileOutputStream = new FileOutputStream(file1);final BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);//边读边写byte[] bytes = new byte[1024];int num;while((num = bufferedInputStream.read(bytes))!=-1){bufferedOutputStream.write(bytes,0,num);}final long end = System.currentTimeMillis();System.out.println(end-start);}//关流bufferedInputStream.close();bufferedOutputStream.close();
}

这篇关于学习大数据,所必需的java基础(7)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/773203

相关文章

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

golang获取prometheus数据(prometheus/client_golang包)

《golang获取prometheus数据(prometheus/client_golang包)》本文主要介绍了使用Go语言的prometheus/client_golang包来获取Prometheu... 目录1. 创建链接1.1 语法1.2 完整示例2. 简单查询2.1 语法2.2 完整示例3. 范围值

springMVC返回Http响应的实现

《springMVC返回Http响应的实现》本文主要介绍了在SpringBoot中使用@Controller、@ResponseBody和@RestController注解进行HTTP响应返回的方法,... 目录一、返回页面二、@Controller和@ResponseBody与RestController

JAVA集成本地部署的DeepSeek的图文教程

《JAVA集成本地部署的DeepSeek的图文教程》本文主要介绍了JAVA集成本地部署的DeepSeek的图文教程,包含配置环境变量及下载DeepSeek-R1模型并启动,具有一定的参考价值,感兴趣的... 目录一、下载部署DeepSeek1.下载ollama2.下载DeepSeek-R1模型并启动 二、J