IO流2

常用的文件操作:

目录的操作和文件删除:

mkdir 创建一级目录:D:\demo

mkdirs 创建多级目录:D:\demo\a\b\c

delete 删除空目录或文件

public class Directory{
public static void main(String[] args) {
//判断 d:\\news1.txt是否存在,如果存在就删除
public void m1(){
String filePath = "d:\\news1.txt";
File file = new File(filePath);
if (file.exists()) {
if (file.delete()) {
System.out.print("删除成功!!");
}
}
else{
System.out.print("该文件不存在~~");
}
}
//判断 D:\\demo02是否存在,存在就删除,否则提示不存在
//在Java编程中,目录也被当成文件
public void m2(){
String filePath = "D:\\demo02";
File file = new File(filePath);
if (file.exists()) {
if (file.delete()) {
System.out.print("删除成功!!");
}
}
else{
System.out.print("该目录不存在~~");
}
}
//判断 D:\\demo\\a\\b\\c 目录是否存在,如果存在就提示已经存在,否则就创建
public void m3(){
String directoryPath = "D:\\demo\\a\\b\\c";
File file = new File(directoryPath);
if (file.exists()) {
System.out.print("该目录已存在~~");
}else{
if(file.mkdirs()){
System.out.print(directoryPath + "创建成功");
}else{
System.out.print("创建失败~~");
}
}
}
}
}

IO 流原理及流的分类:

JavaIO 流原理:
  1. I/O 是 Input/Output 的缩写,I/O 技术是非常实用的技术,用于处理数据传输。如读 / 写文件,网络通讯等
  2. Java 程序中,对于数据的输入 / 输出操作以” 流 (stream)” 的方式进行
  3. java.io 包下提供了各种” 流” 类和接口,用以获取不同种类的数据,并通过方法输入或输出数据
  4. 输入 input:读取外部数据 (磁盘、光盘等存储设备的数据) 到程序 (中)
  5. 输出 output:将程序 (内存) 数据输出到磁盘、光盘等存储设备中
流的分类:

按操作数据单位不同分为:字节流 (8bit) 对二进制文件友好,字符流 (按字符) 对文本文件友好

按操作流的流向不同分为:输入流,输出流

按流的角色的不同分为:节点流,处理流 / 包装流

(抽象基类) 字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
  1. Java 的 IO 流共涉及 40 多个类,实际上非常规则,都是从如上 4 个抽象基类派生的
  2. 由这 4 个类派生出来的子类名称都是以其父名作为子类名后缀

InputStream: 字节输入流

InputStream 抽象类是所有类字节输入流的超类

InputStream 常用的子类:
  1. FileInputStream: 文件输入流
  2. BufferedInputStream: 缓冲字节输入流
  3. ObjectInputStream: 对象字节输入流
例 1

使用 FileInputStream 读取 hello.txt 文件,并将文件内容显示到控制台

read () 方法单个字节读取,效率较低

public void readFile01(){
int readData = 0;
String filePath = "e:\\hello.txt";
FileInputStream fileInputStream = null;
//read()方法单个字节读取,效率较低
try{
//创建FileInputStream对象,用于读取文件
fileInputStream = new FileInputStream(filePath);
//从该输入流读取一个字节的数据。如果没有输入可用,此方法将阻止
//如果返回-1,表示读取完毕
while((readData = fileInputStream.read()) != -1){
System.out.print((char)readData); //转成char显示
//如果有汉字,会出现乱码
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
fileInputStream.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}

使用 read (byte [] b) 方法读取文件,提高效率

public void readFile02(){
//字节数组
byte[] buf = new byte[8];//一次读取8个字节
int readLen = 0;
String filePath = "e:\\hello.txt";
FileInputStream fileInputStream = null;
//read()方法单个字节读取,效率较低
try{
//创建FileInputStream对象,用于读取文件
fileInputStream = new FileInputStream(filePath);
//从该输入流读取最多b.length字节的数据。此方法将阻塞,直到某些输入可用
//如果返回-1,表示读取完毕
//如果读取正常,返回实际读取的字节数
while((readLen = fileInputStream.read(buf)) != -1){
System.out.print(new String(buf,0,readLen)); //转成char显示
//如果有汉字,会出现乱码
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
fileInputStream.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
例 2

使用 FileOutputStream 将数据写到文件中,如果该文件不存在,则创建该文件

public void writerFile(){
//创建FileOutputStream对象
String filePath = "e:\\a.txt";
FileOutputStream fileOutputStream = null;
try{
/*
1、new FileOutputStream(filePath)创建方式,当写入内容时,会覆盖原来的内容
2、new FileOutputStream(filePath,true)创建方式,当写入内容时,是追加到文件后面
*/
//得到FileOutputStream对象
fileOutputStream = new FileOutputStream(filePath);
//写入一个字节
fileOutputStream.writer("H");
//写入字符串
String str = "hello,world!"
//str.getBytes() 可以把 字符串->字节数组
fileOutputStream.writer(str.getBytes());
//或者witle(byte[] b,int off, int len)
}catch(IOException e){
e.printStackTrace
}finally{
try{
fileInputStream.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
完成文件拷贝:将 e:\Koala.jpg 拷贝到 c:\
/*
1、创建文件的输入流,将文件读入到程序
2、创建文件的输出流,将读取到的文件数据,写入到指定的文件
*/
String srcFilePath = "e\\Koala.jpg"
String destFilePath = "e\\Koala2.jpg"
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
//try-catch
fileInputStream = new FileInputStream(srcFilePath);
fileOutputStream = new FileOutputStream(destFilePath);
//定义一个字节数组,提高读取效果
byte[] buf = new byte[1024];
int readLen = 0;
while ((readLen = fileInputStream.read(buf)) != -1 ) {
//读取到后,就写入到文件,通过fileOutputStream
//即是一边读一边写
fileOutputStream.writer(buf,0,readLen);
}
System.out.print("拷贝成功~~");
//try-catch
finally{
//try-catch
//关闭输入流和输出流
if(fileInputStream != null){
fileInputStream.close();
}
if (fileOutputStream != null) {
fileOutputStream.close();
}
//try-catch
}

FileReader 和 FileWriter:

FileReader 和 FileWriter 是字符流,即按照字符来操作 IO

FileReader 相关方法:
  1. new FileReader(File/String)
  2. read: 每次读单个字符,返回该字符,如果到文件末尾返回 - 1
  3. read (char []):批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾返回 - 1
相关 API:
  1. new String (char []):将 char [] 转换成 String
  2. new String (char [],off,len):将 char [] 的指定部分转换成 String
FileWriter 常用方法:
  1. new FileWriter (File/String):覆盖模式,相当于流的指针在首段
  2. new FileWriter (File/String,true):追加模式,相当于流的指针在尾端
  3. write (int):写入单个字符
  4. write (char []):写入指定数组
  5. write (char [],off,len):写入指定数组的指定部分
  6. write (string):写入整个字符串
  7. write (string,off,len):写入字符串的指定部分
相关 API:

String 类:toCharArray:将 String 转换成 char []

例 1 使用 FileReader 从 story.txt 读取内容,并显示

按单个字符读取文件

String filePath = "e:\\stroy.txt";
FileReader fileReader = null;
char data = 0;
//1、创建FileReader对象
//try-carch
fileReader = new FileReader(filePath);
//循环读取 使用read方法,单个字符读取
while ((data = fileReader.read()) != -1) {
System.out.print(char() data);
}
//try-catch
finally{
//try-catch
if (fileReader != null) {
fileReader.close();
}
//try-catch
}

使用字符数组读取文件

String filePath = "e:\\stroy.txt";
FileReader fileReader = null;
int readLen = 0;
char[] buf = new char[8];
//1、创建FileReader对象
//try-carch
fileReader = new FileReader(filePath);
//循环读取 使用read(buf)方法,返回的是实际读取到的字符数
//如果返回-1,说明到文件结束
while ((readLen = fileReader.read(buf)) != -1) {
System.out.print(new String(buf), 0, readLen);
}
//try-catch
finally{
//try-catch
if (fileReader != null) {
fileReader.close();
}
//try-catch
}
例 2 使用 FileWriter 将” 风雨之后,定见彩虹” 写入到 note.txt 文件中
public static void main(String[] args) {
String filePath = "e:\\note.txt";
//创建FileWriter对象
FileWriter fileWriter = null;
char[] chars = {'a','b','c'};
//try-catch
fileWriter = new FileWriter(filePath);
/*
write(int):写入单个字符
write(char[]):写入指定数组
write(char[],off,len):写入指定数组的指定部分
write(string):写入整个字符串
write(string,off,len):写入字符串的指定部分
*/
//write(int):写入单个字符
fileWriter.write("H");
//write(char[]):写入指定数组
fileWriter.write(chars);
//write(char[],off,len):写入指定数组的指定部分
fileWriter.write("ABCDEF".toCharArray(), 0, 3);
//write(string):写入整个字符串
fileWriter.write(" 你好北京~~");
//write(string,off,len):写入字符串的指定部分
fileWriter.write("上海天津", 0, 2); //写入 上海 ,天津没写进去
fileWriter.write("风雨之后,定见彩虹");
//在数据量大的情况下,可以使用循环操作
//try-catch
finally{
//对于FileWriter,一定要关闭流,或者flush才能真正的把数据写入到文件
//try-catch
//fileWriter.flush();
//关闭文件流,等价于flush() + 关闭
fileWriter.close();
//try-catch
}
System.out.print("程序结束~~");
}
创作不易!转载请注明作者及文章链接或作者博客链接——
- 作者:pidanxia
- 链接:https://pidanxia.ink
(链接可为:**文章链接**或者**作者博客链接**)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇