《java学习笔记》之IO流概述(1),java面试问底层原理不懂

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

} catch (IOException e) {

e.printStackTrace();

}finally {

if (fileOutputStream != null){

try {

fileOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

2.3 使用FileInputStream和FileOutputStream完成文件的拷贝

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

/*

  • 使用FileInputStream和FileOutputStream完成文件的拷贝

  • 拷贝的过程应该是一遍读,一边写

  • 使用以上的字节流拷贝文件的时候,文件类型随意,万能的,什么样的文件都能拷

  • */

public class Copy01 {

public static void main(String[] args) {

FileInputStream fileInputStream =null;

FileOutputStream fileOutputStream =null;

try {

fileInputStream = new FileInputStream(“C:\Users\A556U\Desktop\Java核心技术 卷2 高级特性 原书第10版.pdf”);

fileOutputStream =new FileOutputStream(“D:\Java核心技术 卷2 高级特性 原书第10版.pdf”);

int readCont = 0;

byte[] bytes = new byte[1024*1024];//一次最多拷1M

//最主要:一边读一边写

while((readCont = fileInputStream.read(bytes)) != -1){

//fileOutputStream.write(bytes);这样最后一部分可能有重复的

fileOutputStream.write(bytes,0,readCont);

}

//有输出流最后要刷新

fileOutputStream.flush();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

//分开关闭,否则一个出错会影响另一个关闭

if (fileInputStream != null){

try {

fileInputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (fileOutputStream != null){

try {

fileOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

2.4 java.io.FileReader

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

/*

  • FileReader:

  • 文件字符输入流,只能读取普通文本

  • 读取文本文件的时候,比较方便,快捷

  • */

public class FileReaderTest {

public static void main(String[] args) {

FileReader fileReader =null;

try {

//创建一个文件字符输入流

fileReader = new FileReader(“C:\Users\A556U\JavaSE曹鹏\chapter23 IO流\src\caopeng\javase\test\temp”);

//创建一个char数组

/*

char[] chars = new char[4];//一次读取四个字符

int readCount = 0;

while((readCount = fileReader.read(chars)) != -1){

System.out.println(new String(chars,0,readCount));

}

*/

//或者这样读

//创建一个char数组

char[] chars = new char[30];//一次读完

fileReader.read(chars);

for(char c : chars){

System.out.println©;

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally{

if (fileReader != null){

try {

fileReader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

2.5 java.io.FileWriter

import java.io.FileWriter;

import java.io.IOException;

/*

*FileWrite:

  • 文件字符输出流

  • 只能输出普通文本

*/

public class FileWriterTest {

public static void main(String[] args) {

FileWriter fileWriter =null;

try {

//创建文件字符输出对象

fileWriter = new FileWriter(“C:\Users\A556U\JavaSE曹鹏\chapter23 IO流\src\caopeng\javase\test\temp”,true);

//创建char数组

char[] chars = {‘钢’,‘铁’,‘侠’,‘雷’,‘神’,‘美’,‘国’,‘队’,‘长’};

//全部写入

fileWriter.write(chars);

//部分写入

fileWriter.write(chars,0,3);

//直接写入字符串

fileWriter.write(“钢铁侠好帅”);

//换行

fileWriter.write(“\n”);

//继续写

fileWriter.write(“雷神也好帅”);

//输出流最后一定要刷新!!!

fileWriter.flush();

} catch (IOException e) {

e.printStackTrace();

}finally{

if(fileWriter != null){

try {

fileWriter.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

2.6 使用FileReader FileWriter 进行拷贝

//使用FileReader FileWriter 进行拷贝,只能拷贝“普通文本”文件

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class Copy02 {

public static void main(String[] args) {

FileReader fileReader =null;

FileWriter fileWriter =null;

try {

fileReader = new FileReader(“C:\Users\A556U\Desktop\java笔记\day19课堂笔记.txt”);

fileWriter = new FileWriter(“D:\day19课堂笔记.txt”);

int readCount = 0;

char[] chars =new char[1024 * 1024];//一次读1M

while((readCount = fileReader.read(chars)) != -1){

fileWriter.write(chars,0,readCount);

}

//刷新!!!

fileWriter.flush();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally{

if(fileReader != null){

try {

fileReader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if(fileWriter != null){

try {

fileWriter.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

三.转换流:(将字节流转换成字符流)


3.1 java.io.InputStreamReader

import java.io.*;

//BufferedReader 的构造方法只能传字符流,不能传字节流

//那么我们可以把字节流变成字符流

public class BufferedReaderTest02 {

public static void main(String[] args) {

BufferedReader bufferedReader =null;

try {

/*//创建一个字节流

FileInputStream fileInputStream = new FileInputStream(“D:\day25课堂笔记.txt”);

//通过 转化流 转成 字符流

InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);

//创建带缓冲区的字符输入流

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);*/

//合并

bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(“D:\day25课堂笔记.txt”)));

//读

String s =null;

while ((s = bufferedReader.readLine()) != null){

System.out.println(s);

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (bufferedReader != null){

try {

bufferedReader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

3.2 java.io.OutputStreamWriter

这个是将字节输出流转化成字符输出流,与上面的类似

四.缓冲流专属:


4.1 java.io.BufferedReader

/*

  • BufferedReader:

  • 带有缓冲区的字符输入流

  • 使用这个流的时候不需要自定义char数组,或者说不需要自定义byte数组。自带缓冲

*/

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

public class BufferedReaderTest01 {

public static void main(String[] args) {

BufferedReader bufferedReader = null;

try {

//BufferedReader的构造方法需要流

//当一个流的构造方法中需要流的时候,被传进来的流叫做:节点流

//外部负责包装这个流,叫做:包装流,或者叫 处理流

FileReader fileReader = new FileReader(“D:\day25课堂笔记.txt”);

//这里 bufferedReader 是包装流 FileReader是节点流

bufferedReader = new BufferedReader(fileReader);

/*String firstLine = bufferedReader.readLine();

System.out.println(firstLine);*/

//循环读

String s = null;

while((s = bufferedReader.readLine()) != null){

System.out.println(s);

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

//关闭流

//只要关闭包装流,节点流会自动关闭

if (bufferedReader != null){

try {

bufferedReader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

4.2 java.io.BufferedWriter

/*

  • BufferedReader:

  • 带有缓冲区的字符输入流

  • 使用这个流的时候不需要自定义char数组,或者说不需要自定义byte数组。自带缓冲

*/

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

public class BufferedWriterTest01 {

public static void main(String[] args) {

BufferedWriter bufferedWriter = null;

try {

bufferedWriter = new BufferedWriter(new FileWriter(“D:\day25课堂笔记.txt”,true));

//写

bufferedWriter.write(“钢铁侠,蜘蛛侠”);

//换行

bufferedWriter.write(“\n”);

bufferedWriter.write(“美队,雷神”);

//输出流要刷新

bufferedWriter.flush();

} catch (IOException e) {

e.printStackTrace();

}finally {

if (bufferedWriter != null){

try {

bufferedWriter.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

4.3 java.io.BufferedInputStream
4.4 java.io.BufferedOutputStream

这两个与上面的类似,只不过这两个是字节流,就不在这赘述了。

五.标准输出流:


5.1 java.io.PrintWriter

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.PrintStream;

/*

  • java.io.PrintStream:标准的字节输出流,默认输出到控制台

*/

public class PrintStreamTest {

public static void main(String[] args) {

//合并

System.out.println(“Hello World”);

//分开

PrintStream ps = System.out;

ps.println(“Hello 钢铁侠”);

ps.println(“Hello 美国队长”);

ps.println(“Hello 雷神”);

ps.println(“Hello 蜘蛛侠”);

//标准输出流不需要手动close()关闭

//可以改变标准输出流的输出方向吗?

//可以

//标准输出流不再指向控制台,指向log文件

try {

//修改输出方向,将输出文件修改到“log”文件

PrintStream printStream =new PrintStream(new FileOutputStream(“C:\Users\A556U\JavaSE曹鹏\chapter23 IO流\src\caopeng\javase\test\blog”));

//再输出

printStream.println(“Hello World”);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

5.2 利用标准输出流编写博客工具类

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.PrintStream;

import java.text.SimpleDateFormat;

import java.util.Date;

//日志工具类

public class Logger {

public static void logger(String message){

try {

PrintStream printStream = new PrintStream(new FileOutputStream(“C:\Users\A556U\JavaSE曹鹏\chapter23 IO流\src\caopeng\javase\test\blog”,true));

//改变输出方向

System.setOut(printStream);

//获取系统当前时间

Date date =new Date(System.currentTimeMillis());

SimpleDateFormat simpleDateFormat =new SimpleDateFormat(“yy-MM-dd HH:mm:ss:SSS”);

String strTime = simpleDateFormat.format(date);

printStream.println(strTime + " " +message);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

public class LoggerTest {

public static void main(String[] args) {

Logger.logger(“我好厉害”);

Logger.logger(“今天把IO流笔记弄好”);

}

}

六.对象专属流:


6.1 java.io.ObjectOutputStream(掌握)

import java.io.Serializable;

public class Student implements Serializable {

private int no;

private String name;

public Student() {

}

public Student(int no, String name) {

this.no = no;

this.name = name;

}

public int getNo() {

return no;

}

public void setNo(int no) {

this.no = no;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return “Student{” +

“no=” + no +

“, name='” + name + ‘’’ +

‘}’;

}

}

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

public class ObjectOutputStreamTest {

public static void main(String[] args) {

ObjectOutputStream objectOutputStream = null;

try {

//序列化

objectOutputStream =new ObjectOutputStream(new FileOutputStream(“Student1”));

//创建java对象

Student student1 =new Student(123,“小明”);

//序列化对象

//java.io.NotSerializableException: caopeng.javase.test.Student

//如果Student不实现 Serializable 这个接口,就不能序列化

objectOutputStream.writeObject(student1);

//刷新

objectOutputStream.flush();

} catch (IOException e) {

e.printStackTrace();

}finally {

if (objectOutputStream != null){

try {

objectOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

6.1 java.io.ObjectInputStream(掌握)

{

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} finally {

if (objectInputStream != null){

try {

objectInputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

七.File类:


import java.io.File;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

/*

  • File:

  • 1.File类和四大IO流家族,没什么关系,所以file类不能完成文件的读和写

  • 2.file类的对象代表什么?

  •   文件和目录路径的抽象表达形式
    
  •       D:\JAVA 是一个file对象
    
  •       D:\JAVA\bin\server\classes.jsa 也是一个file对象
    
  •       一个file对象有可能对应的是目录,也可能是文件
    
  •       file只是一个路径的抽象表达形式
    
  • 3.需要掌握file类中的常用方法

  • */

public class FileTest01 {

public static void main(String[] args) {

//创建一个file对象

File file1 =new File(“D:\FileTest01”);

//判断file对象是否存在

面试准备+复习分享:

为了应付面试也刷了很多的面试题与资料,现在就分享给有需要的读者朋友,资料我只截取出来一部分哦

秋招|美团java一面二面HR面面经,分享攒攒人品

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
y {

if (objectInputStream != null){

try {

objectInputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

七.File类:


import java.io.File;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

/*

  • File:

  • 1.File类和四大IO流家族,没什么关系,所以file类不能完成文件的读和写

  • 2.file类的对象代表什么?

  •   文件和目录路径的抽象表达形式
    
  •       D:\JAVA 是一个file对象
    
  •       D:\JAVA\bin\server\classes.jsa 也是一个file对象
    
  •       一个file对象有可能对应的是目录,也可能是文件
    
  •       file只是一个路径的抽象表达形式
    
  • 3.需要掌握file类中的常用方法

  • */

public class FileTest01 {

public static void main(String[] args) {

//创建一个file对象

File file1 =new File(“D:\FileTest01”);

//判断file对象是否存在

面试准备+复习分享:

为了应付面试也刷了很多的面试题与资料,现在就分享给有需要的读者朋友,资料我只截取出来一部分哦

[外链图片转存中…(img-6Hy4UQEX-1713578279991)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-CX3ceTlo-1713578279991)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值