手机网站要备案吗,wordpress vip查看插件,母婴网站建设方案,四川建设网电子招标一、文件引入
1、文件的概念
文件是保存数据的地方#xff08;例如#xff0c;文档#xff0c;图片#xff0c;音视频等#xff09;
2、文件流
流#xff1a;数据在数据源#xff08;文件#xff09;和程序#xff08;内存#xff09;之间经历的路径 输入流…一、文件引入
1、文件的概念
文件是保存数据的地方例如文档图片音视频等
2、文件流
流数据在数据源文件和程序内存之间经历的路径 输入流数据从数据源文件到程序内存的路径 输出流数据从程序内存到数据源文件的路径
3、常用文件操作
1基本介绍
创建文件对象常用构造器
构造器说明File(String pathname)根据路径创建 File 对象File(File parent, String child)根据父目录 File 对象 子路径创建 File 对象File(String parent, String child)根据父目录子路径创建 File 对象
文件对象常用方法
方法说明createNewFile()创建文件getName()获取文件名称getParent()获取文件父级目录length()获取文件大小以字节为单位exists()判断文件是否存在isFile()判断是否是一个文件isDirectory()判断是否是一个目录delete()删除空目录或文件mkdir()创建单级目录mkdirs()创建多级目录
2基本使用 基本使用案例一 FileTest 类
package com.my.test.file;import java.io.File;
import java.io.IOException;public class FileTest {public static void main(String[] args) throws IOException {File file new File(d:\\);File file1 new File(d:\\FileTestText1.txt);File file2 new File(d:\\, FileTestText2.txt);File file3 new File(file, FileTestText3.txt);if (file1.createNewFile()) {System.out.println(创建成功);} else {System.out.println(创建失败);}if (file2.createNewFile()) {System.out.println(创建成功);} else {System.out.println(创建失败);}if (file3.createNewFile()) {System.out.println(创建成功);} else {System.out.println(创建失败);}}
}输出结果
创建成功
创建成功
创建成功基本使用案例二 FileMethodTestText.txt
Hello WorldFileMethodTest 类
package com.my.test.file;import java.io.File;public class FileMethodTest {public static void main(String[] args) {File file new File(d:\\FileMethodTestText.txt);System.out.println(file.getName());System.out.println(file.getParent());System.out.println(file.length());System.out.println(file.exists());System.out.println(file.isFile());System.out.println(file.isDirectory());if (file.delete()) {System.out.println(文件删除成功);}System.out.println(file.exists());System.out.println();File directory new File(d:\\a\\b\\c);if (directory.mkdirs()) {System.out.println(目录创建成功);}System.out.println(directory.exists());}
}输出结果
FileMethodTestText.txt
d:\
11
true
true
false
文件删除成功
false目录创建成功
true二、IO 流引入
1、概述 IO 是 Input Output 的缩写IO 流用于处理数据传输如读写文件网络通讯等 Java程序中对于数据的输入 / 输出操作以流Stream的方式运行 java.io 包下提供了各种流类和接口以获取不同种类的数据并通过方法输入或输出 输入 Input读取外部数据文件磁盘光盘等中的数据到程序内存 输出 Output将程序中的数据输出到外部文件磁盘光盘等
2、流的分类 按操作数据单位不同分为字节流二进制文件字符流文本文件 按数据流的流向不同分为输入流输出流 按流的角色不同分为节点流处理流包装流
3、IO 流体系
1抽象基类 输入字节流 InputStream 输入字符流 Reader 输出字节流 OutputStream 输出字符流 Writer
2概述
Java IO 流涉及 40 多个类都是从 4 个抽象基类派生由这 4 个抽象基类派生出来的子类都以其父类作为类名的后缀 三、文件流
1、文件输入流 FileInputStream
1基本介绍
常用构造器
构造器说明FileInputStream(String name)通过一个指定文件路径的字符串创建一个 FileInputStream 对象FileInputStream(File file)通过一个 File 对象创建一个 FileInputStream 对象文件路径在创建 File 对象时指定
常用方法
方法说明close()关闭流read()从输入流中读取一个字节read(byte b[])从输入流中最多将 b.length 个字节读入 byte 数组中read(byte b[], int off, int len)从输入流中将指定长度字节读入 byte 数组中
2基本使用
FileInputStreamTestText1.txt
Hello World~FileInputStreamTestText2.txt
Hello World~~FileInputStreamTest 类
package com.my.test.filestream;import java.io.FileInputStream;
import java.io.IOException;public class FileInputStreamTest {public static void main(String[] args) throws IOException {FileInputStream fileInputStream1 new FileInputStream(d:\\FileInputStreamTestText1.txt);int readData 0;while ((readData fileInputStream1.read()) ! -1) {System.out.println((char) readData);}fileInputStream1.close();System.out.println();FileInputStream fileInputStream2 new FileInputStream(d:\\FileInputStreamTestText2.txt);byte[] buf new byte[8];int length 0;while ((length fileInputStream2.read(buf)) ! -1) {System.out.println(new String(buf, 0, length));}fileInputStream1.close();}
}输出结果
H
e
l
l
oW
o
r
l
d
~Hello Wo
rld~~2、文件输出流 FileOutputStream
1基本介绍
常用构造器
构造器说明FileOutputStream(String name)通过一个指定文件路径的字符串创建一个 FileOutputStream 对象FileOutputStream(File file)通过一个 File 对象创建一个 FileOutputStream 对象文件路径在创建 File 对象时指定FileOutputStream(String name, boolean append)通过一个指定文件路径的字符串构建一个FileOutputStream 对象append 为 true 表示追加输出数据为 false 表示覆盖输出数据FileOutputStream(File file, boolean append)通过一个 File 对象创建一个 FileOutputStream 对象文件路径在创建 File 对象时指定append 为 true 表示追加输出数据为 false 表示覆盖输出数据
常用方法
方法说明close()关闭流write(byte b[])将 b.length 个字节从 byte 数组写入输出流中write(byte b[], int off, int len)将指定长度字节从 byte 数组写入输出流中
2基本使用
FileOutputStreamTest 类
package com.my.test.filestream;import java.io.FileOutputStream;
import java.io.IOException;public class FileOutputStreamTest {public static void main(String[] args) throws IOException {FileOutputStream fileOutputStream new FileOutputStream(d:\\FileOutputStreamTestText.txt, true);String str HelloWorld~~~;fileOutputStream.write(str.getBytes());System.out.println(文件创建完成);fileOutputStream.close();}
}输出结果
文件创建完成FileOutputStreamTestText.txt
HelloWorld~~~3、案例文件拷贝
1需求
使用文件流完成文件文本文件 / 图片 / 音乐拷贝
2具体实现
HelloWorld.txt
Hello World 1
Hello World 2FileCopyTest 类
package com.my.test.filestream;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class FileCopyTest {public static void main(String[] args) throws IOException {FileInputStream fileInputStream new FileInputStream(d:\\HelloWorld.txt);FileOutputStream fileOutputStream new FileOutputStream(d:\\FileCopyTestText.txt);byte[] buf new byte[8];int length 0;while ((length fileInputStream.read(buf)) ! -1) {fileOutputStream.write(buf, 0, length);}System.out.println(文件拷贝成功);fileInputStream.close();fileOutputStream.close();}
}输出结果
文件拷贝成功FileCopyTestText.txt
Hello World 1
Hello World 2四、字符流
1、字符输入流 FileReader
1基本介绍
常用构造器
构造器说明FileReader(String fileName)通过一个指定文件路径的字符串创建一个 FileReader 对象FileReader(File file)通过一个 File 对象创建一个 FileReader 对象文件路径在创建 File 对象时指定
常用方法
方法说明close()关闭流read()读取单个字符如果到文件末尾则返回 -1read(char[] cbuf)读取多个字符到数组返回读取到的字符数如果到文件末尾返回 -1
2基本使用
FileReaderTestText1.txt
这里测试字符输入流~FileReaderTestText2.txt
这里测试字符输入流~~FileReaderTest 类
package com.my.test.charstream;import java.io.FileReader;
import java.io.IOException;public class FileReaderTest {public static void main(String[] args) throws IOException {FileReader fileReader1 new FileReader(d:\\FileReaderTestText1.txt);int data 0;while ((data fileReader1.read()) ! -1) {System.out.println((char) data);}fileReader1.close();System.out.println();FileReader fileReader2 new FileReader(d:\\FileReaderTestText2.txt);char[] charArr new char[5];int length 0;while ((length fileReader2.read(charArr)) ! -1) {System.out.println(new String(charArr, 0, length));}fileReader2.close();}
}输出结果 这
里
测
试
字
符
输
入
流
~这里测试
字符输入流
~~2、字符输出流 FileWriter
1基本介绍
常用构造器
构造器说明FileWriter(String name)通过一个指定文件路径的字符串创建一个 FileWriter 对象FileWriter(File file)通过一个 File 对象创建一个 FileWriter 对象文件路径在创建 File 对象时指定FileWriter(String name, boolean append)通过一个指定文件路径的字符串创建一个 FileWriter 对象append 为 true 表示追加输出数据为 false 表示覆盖输出数据FileWriter(File file, boolean append)通过一个 File 对象创建一个 FileWriter 对象文件路径在创建 File 对象时指定append 为 true 表示追加输出数据为 false 表示覆盖输出数据
常用方法
方法说明close()关闭流flush()刷新write(int c)写入单个字符write(char[] cbuf)写入字符数组write(char[] cbuf, int off, int len)写入字符数组的指定部分write(String str)写入字符串write(String str, int off, int len)写入字符串的指定部分
2注意事项
FileWriter 使用后必须要关闭close或刷新flush否则会写入不到指定的文件
3基本使用
FileWriterTest 类
package com.my.test.charstream;import java.io.FileWriter;
import java.io.IOException;public class FileWriterTest {public static void main(String[] args) throws IOException {FileWriter fileWriter new FileWriter(d:\\FileWriterTestText.txt, true);fileWriter.write(这里测试字符输出流.toCharArray());System.out.println(文件创建完成);fileWriter.close();}
}输出结果
文件创建完成FileWriterTestText.txt
这里测试字符输出流五、处理流引入
1、基本介绍 节点流可以从一个特定的数据源读写数据如 FileReaderFileWriter 处理流也称包装流连接在已存在的流节点流或处理流之上为程序提供更为强大的读写功能 2、节点流和处理流的区别 节点流是底层流直接跟数据源相接 处理流包装节点流既可以消除不同节点流的实现差异也可以提供更方便的方法完成输入输出 处理流包装节点流使用了修饰器设计模式不会直接与数据源相接
3、节点流的功能体现 性能的提高主要以增加缓冲的方式来提高输入输出的效率 操作的便捷提供了一系列便捷的方法来输入输出大批量数据 七、字符处理流
1、字符处理输入流 BufferedReader
BufferedReaderTestText.txt
Hello
BufferedReaderBufferedReaderTest 类
package com.my.test.charbufferstream;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class BufferedReaderTest {public static void main(String[] args) throws IOException {BufferedReader bufferedReader new BufferedReader(new FileReader(d:\\BufferedReaderTestText.txt));String line;while ((line bufferedReader.readLine()) ! null) {System.out.println(line);}bufferedReader.close();}
}输出结果
Hello
BufferedReader2、字符处理输入流 BufferedWriter
package com.my.test.charbufferstream;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class BufferedWriterTest {public static void main(String[] args) throws IOException {BufferedWriter bufferedWriter new BufferedWriter(new FileWriter(d:\\BufferedWriterTestText.txt));bufferedWriter.write(Hello);bufferedWriter.newLine();bufferedWriter.write(BufferedWriter);System.out.println(文件创建完成);bufferedWriter.close();}
}输出结果
文件创建完成BufferedWriterTestText.txt
Hello
BufferedWriter3、案例文件拷贝
1需求
使用字符处理流完成文件文本文件 / 图片 / 音乐拷贝
2具体实现
HelloWorld.txt
Hello World 1
Hello World 2BufferedCopyTest 类
package com.my.test.charbufferstream;import java.io.*;public class BufferedCopyTest {public static void main(String[] args) throws IOException {BufferedReader bufferedReader new BufferedReader(new FileReader(d:\\HelloWorld.txt));BufferedWriter bufferedWriter new BufferedWriter(new FileWriter(d:\\BufferedWriterCopyText.txt));String line;while ((line bufferedReader.readLine()) ! null) {bufferedWriter.write(line);// 插入一个换行bufferedWriter.newLine();}System.out.println(文件拷贝成功);bufferedReader.close();bufferedWriter.close();}
}输出结果
文件拷贝成功BufferedWriterCopyText.txt
Hello World 1
Hello World 2八、字节处理流
1、字节处理输入流 BufferedInputStream
BufferedInputStreamTestText.txt
Hello
BufferedInputStreamBufferedInputStreamTest 类
package com.my.test.bytebufferstream;import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;public class BufferedInputStreamTest {public static void main(String[] args) throws IOException {BufferedInputStream bufferedInputStream new BufferedInputStream(new FileInputStream(d:\\BufferedInputStreamTestText.txt));byte[] bytes new byte[10];int len;while ((len bufferedInputStream.read(bytes)) ! -1) {System.out.print(new String(bytes, 0, len));}bufferedInputStream.close();}
}输出结果
Hello
BufferedInputStream2、字节处理输出流 BufferedOutputStream
BufferedOutputStreamTest 类
package com.my.test.bytebufferstream;import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class BufferedOutputStreamTest {public static void main(String[] args) throws IOException {BufferedOutputStream bufferedOutputStream new BufferedOutputStream(new FileOutputStream(d:\\BufferedOutputStreamTestText.txt));bufferedOutputStream.write(Hello.getBytes());bufferedOutputStream.write(\n.getBytes());bufferedOutputStream.write(BufferedOutputStream.getBytes());System.out.println(文件创建完成);bufferedOutputStream.close();}
}输出结果
文件创建完成BufferedOutputStreamTestText.txt
Hello
BufferedOutputStream九、对象处理流
1、序列化
1序列化和反序列化 序列化在保存数据时保存数据的值和数据类型 反序列化在恢复数据时恢复数据的值和数据类型
2对象序列化
需要让某个对象支持序列化必须让其类支持序列需要实现以下其中一接口 Serializable 接口标记接口无需实现方法推荐使用 Externalizable 接口该接口需要实现方法
2、注意事项
序列化的类中建议添加 serialVersionUID提高版本兼容性例
private static final long serialVersionUID 1L;序列化对象时除了 static 和 transient 修饰的成员其他成员都会进行序列化 序列化对象时里面属性的类型也需要支持序列化 序列化具备可继承性
3、对象处理输出流 ObjectOutputStream
Dog 类
package com.my.test.entity;import java.io.Serializable;public class Dog implements Serializable {String name;int age;public Dog(String name, int age) {this.name name;this.age age;}Overridepublic String toString() {return Dog{ name name \ , age age };}
}ObjectOutputStreamTest 类
package com.my.test.objectstream;import com.my.test.entity.Dog;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;public class ObjectOutputStreamTest {public static void main(String[] args) throws IOException {ObjectOutputStream objectOutputStream new ObjectOutputStream(new FileOutputStream(d:\\ObjectOutputStreamTestText.txt));objectOutputStream.writeInt(100);objectOutputStream.writeUTF(HelloObjectOutputStream);objectOutputStream.writeObject(new Dog(阿黄, 2));System.out.println(文件创建完成);objectOutputStream.close();}
}输出结果
文件创建完成ObjectOutputStreamTestText.txt
w d HelloObjectOutputStreamsr com.my.test.objectstream.Dog~|?$€ I ageL namet Ljava/lang/String;xp t 闃块粍4、对象处理输入流 ObjectInputStream
Dog 类
package com.my.test.entity;import java.io.Serializable;public class Dog implements Serializable {String name;int age;public Dog(String name, int age) {this.name name;this.age age;}Overridepublic String toString() {return Dog{ name name \ , age age };}
}ObjectInputStreamTest 类
package com.my.test.objectstream;import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;public class ObjectInputStreamTest {public static void main(String[] args) throws IOException, ClassNotFoundException {ObjectInputStream objectInputStream new ObjectInputStream(new FileInputStream(d:\\ObjectOutputStreamTestText.txt));System.out.println(objectInputStream.readInt());System.out.println(objectInputStream.readUTF());System.out.println(objectInputStream.readObject());objectInputStream.close();}
}输出结果
100
HelloObjectOutputStream
Dog{name阿黄, age2}十、标准流
1、基本介绍
标准流类型默认设备标准输入流 System.inInputStream键盘标准输出流 System.outPrintStream显示器
2、标准输入流 System.in
SystemInTest 类
package com.my.test.standardstream;import java.util.Scanner;public class SystemInTest {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out.print(请输入);String next scanner.next();System.out.println(Hello next);}
}输出结果
请输入sunke
Hello sunke3、标准输出流 System.out
SystemOutTest 类
public class SystemOutTest {public static void main(String[] args) {System.out.println(System.out.getClass());System.out.println(Hello System.out);}
}输出结果
class java.io.PrintStream
HelloSystem.out十一、转换流
1、基本介绍 转换输入流 InputStreamReaderReader 的子类可以将 InputStream字节流包装成 Reader字符流 转换输出流 OutputStreamWriterWriter 的子类可以将 OutputStream字节流包装成 Writer字符流 当处理纯文本数据时使用字符流效率更高并且可以有效解决中文问题 转换流指定编码UTF-8、gbk、gb2313 等
2、转换输入流 InputStreamReader
InputStreamReaderTestText.txt
你好转换输入流InputStreamReaderTest 类
package com.my.test.transform;import java.io.*;public class InputStreamReaderTest {public static void main(String[] args) throws IOException {InputStreamReader inputStreamReader new InputStreamReader(new FileInputStream(d:\\InputStreamReaderTestText.txt), gbk);BufferedReader bufferedReader new BufferedReader(inputStreamReader);String line;while ((line bufferedReader.readLine()) ! null) {System.out.println(line);}bufferedReader.close();}
}输出结果
你好转换输入流3、转换输出流 OutputStreamWriter
OutputStreamWriterTest 类
package com.my.test.transform;import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;public class OutputStreamWriterTest {public static void main(String[] args) throws IOException {OutputStreamWriter outputStreamWriter new OutputStreamWriter(new FileOutputStream(d:\\OutputStreamWriterTestText.txt), gbk);BufferedWriter bufferedWriter new BufferedWriter(outputStreamWriter);bufferedWriter.write(你好转换输出流.toCharArray());System.out.println(文件创建完成);bufferedWriter.close();}
}输出结果
文件创建完成OutputStreamWriterTestText.txt
你好转换输出流十二、打印流
1、节打印流 PrintStream
PrintStreamTest 类
package com.my.test.printstream;import java.io.IOException;
import java.io.PrintStream;public class PrintStreamTest {public static void main(String[] args) throws IOException {PrintStream out System.out;out.println(Hello PrintStream);out.println(你好字节打印流);System.setOut(new PrintStream(d:\\PrintStreamTestText1.txt));System.out.println(Hello PrintStream 1);System.out.println(你好字节打印流 1);PrintStream printStream new PrintStream(d:\\PrintStreamTestText2.txt);printStream.write(Hello PrintStream 2.getBytes());printStream.write(\r.getBytes());printStream.write(你好字节打印流 2.getBytes());out.println(文件创建成功);out.close();printStream.close();}
}输出结果
Hello PrintStream
你好字节打印流
文件创建成功PrintStreamTestText1.txt
Hello PrintStream 1
你好字节打印流 1PrintStreamTestText2.txt
Hello PrintStream 2
你好字节打印流 22、字符打印流 PrintWriter
PrintWriterTest 类
package com.my.test.printstream;import java.io.FileNotFoundException;
import java.io.PrintWriter;public class PrintWriterTest {public static void main(String[] args) throws FileNotFoundException {PrintWriter printWriter new PrintWriter(d:\\PrintWriterTestText.txt);printWriter.write(Hello PrintWriter);printWriter.write(\r);printWriter.write(你好字符打印流);System.out.println(文件创建成功);printWriter.close();}
}输出结果
文件创建成功PrintWriterTestText.txt
Hello PrintWriter
你好字符打印流3、小结 打印流只有输出流没有输入流 PrintStream 经典使用
PrintStream out System.out;修改 System.out.println(); 的打印位置
System.setOut(new PrintStream(【文件路径】));十三、Properties 配置文件
1、基本介绍
Properties 配置文件格式如下其中键值对不需要有空格不要引号默认类型为 String
【键】【值】Properties 常用方法
方法说明load加载配置文件的键值对到 Properties 对象list将数据显示到指定位置getProperty根据键获取值setProperty设置键值对到 Properties 对象store将 Properties 对象中的键值对存储到配置文件中在 IDEA 中若保存信息中有中文会存储为 Unicode 编码
2、基本使用
PropertiesTestText.properties
ip192.168.10.1
usernameroot
password123456PropertiesTest.java
package com.my.test.properties;import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;public class PropertiesTest {public static void main(String[] args) throws IOException {Properties properties1 new Properties();properties1.load(new FileReader(d:\\PropertiesTestText.properties));properties1.list(System.out);System.out.println(properties1.getProperty(ip));System.out.println(properties1.getProperty(username));System.out.println(properties1.getProperty(password));System.out.println();Properties properties2 new Properties();properties2.setProperty(hobby, read);properties2.setProperty(age, 20);properties2.store(new FileWriter(d:\\PropertiesChangeTestText.properties), null);System.out.println(文件创建完成);}
}输出结果
-- listing properties --
password123456
ip192.168.10.1
usernameroot
192.168.10.1
root
123456文件创建完成PropertiesChangeTestText.properties
#Wed Dec 21 09:17:23 CST 2022
age20
hobbyread十四、其他流
1、LineNumberReader
1基本介绍
LineNumberReader 是 Java IO 流中的一个类它继承自 BufferedReader这个类除了拥有 BufferedReader 的所有功能外还增加了跟踪行号的能力
方法说明getLineNumber()用于获取当前读取位置的行号行号是从 0 开始计数的每当读取到换行符 \n 或回车符 \r 时行号就会增加setLineNumber(int lineNumber)用于设置当前读取位置的行号该方法并不会改变流的实际读取位置即它不会将文件指针移动到指定的行它只是改变了 LineNumberReader 内部用于记录行号的变量的值
2演示
LineNumberReaderTest.txt
1 1 10
1 0 01
0 1 011 1 0 10 0 10
1 1 1 10 1 11
1 0 0 01 0 01
1 0 1 01 1 10
0 1 0 01 0 01
0 1 1 01 1 10LineNumberReaderTest.java
package com.my.test.linenumberreader;import java.io.*;public class LineNumberReaderTest {public static void main(String[] args) {File file new File(d:\\LineNumberReaderTest.txt);FileReader fileReader null;LineNumberReader lineReader null;try {fileReader new FileReader(file);lineReader new LineNumberReader(fileReader);String line;int lineNumber 0;while ((line lineReader.readLine()) ! null) {lineNumber lineReader.getLineNumber();System.out.println(Line lineNumber : line);}} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);} finally {try {if (lineReader ! null) lineReader.close();if (fileReader ! null) fileReader.close();} catch (IOException e) {e.printStackTrace();}}}
}输出结果
Line 1: 1 1 10
Line 2: 1 0 01
Line 3: 0 1 01
Line 4:
Line 5: 1 1 0 10 0 10
Line 6: 1 1 1 10 1 11
Line 7: 1 0 0 01 0 01
Line 8: 1 0 1 01 1 10
Line 9: 0 1 0 01 0 01
Line 10: 0 1 1 01 1 10