一、java.io.File
1、绝对路径和相对路径
File类:用来构造文件或文件夹的类,在其构造函数中要求传入一个String类型的参数,用于指示文件所在的路径.这里可以使用绝对路径作为参数,也可以使用相对路径. 使用绝对路径指明了文件的具体路径(如:E:\images\login.gif),java虚拟机(JVM)很容易就能定位到该文件,那么使用的是相对路径jvm又是如何定位文件的呢?
绝对路径名是完整的路径名,不需要任何其他信息就可以定位自身表示的文件。相反,相对路径名必须使用来自其他路径名的信息进行解释。默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。System.getProperty("user.dir")
2、创建文件对象
创建File对象时必须给出文件或文件夹名(可以是相对路径也可以是绝对路径):
File file1 = new File("C:\\java\\aaa.bmp");
File file2 = new File("C:\\Temp");
File file3 = new File("./data.txt");//相对路径:"./"当前目录,
3、检查文件对象是否存在
boolean exists();
4、检查是否为文件
boolean isFile();如果File对象所指的是一个文件,则返回true
5、 操作文件中的相关方法:
5.1、查询文件长度
long length();返回文件长度,文件夹的长度为0
5.2、查询文件修改日期
long lastModified();返回文件上次修改的日期时间,返回的是从1970年午夜至今文件最后修改时刻的毫秒数,但可以通过Calendar类表示成相对时间。
5.3、获得文件名和相对路径的函数:
String getName(); // getName函数获得文件名,不包含路径
String getPath(); // getPath函数获得文件所在路径和文件名称
String getAbsolutePath(); //获得文件的绝对路径
5.4、重命名/移动文件(本地文件的移动,如果是网络上那么还得通过流的读写)
boolean renameTo(File dest);
作用:给文件或文件夹改名,如果dest所指的路径与文件原来的路径不同的话,就会将文件或文件夹移动到目标位置。
5.5、删除文件/目录
boolean delete();删除File对象所指向的文件或文件夹。如果是文件夹:文件夹必须是空的,否则无法删除
5.6、创建文件
file1.createNewFile();如果文件不存在,则创建一个新文件;如果文件存在, 则不进行任何操作,返回false。
5.7、同样:检查是否是(文件夹)目录、操作目录相关方法、创建目录、删除目录
boolean mkdir();创建一个子目录//保证要创建的子目录上级目录已经存在
boolean mkdirs();创建多个(多层)子目录//如果要创建的子目录的上级目录不存在,则先创建上级目录,再创建子目录
列举出文件夹下的所有文件
file.list();// 当前文件夹下:文件名和文件夹名称
file.listFiles();// 当前文件夹下文件对象
二、文件过滤器
1、FileFilter:
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.getName().endsWith("jpg")) {// 区分大小写,如何不区分? FileNameExtensionFilter 文件扩展名过滤器(文件扩展名的比较不区分大小写)
return true;
}
return false;
}
});
2、FilenameFilter
FilenameFilter filenameFilter = new FilenameFilter() {
public boolean accept(File dir, String name) {
if (name.endsWith("JPG")) { return true;
}
return false;
}
};
//文件名过滤和文件对象过滤
String[] filenames = file.list(filenameFilter);
File[] files=file.listFiles(filenameFilter);
三、字节流
字节流只能读取字节数据。
字节流读取中文时,会出乱码。因为一个中文字符占两个字节。
字节流:用于读取二进制的数据文件,(如声音,图片,视频等)
1、字节输入流(InputStream,FileInputStream,BufferedInputStream,DataInputStream)
(1)InputStream 此抽象类是表示字节输入流的所有类的超类,以字节为单位
常用方法:
int read()下一个数据字节(0 到 255 范围内的 int 字节值),如果到达流的末尾,则返回 -1
int read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
int read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
void close() 关闭此输入流并释放与该流关联的所有系统资源
(2)直接子类:
FileInputStream :把文件对象转化成输入流。用于读取诸如图像数据之类的原始字节流。
构造方法:
FileInputStream(File file)通过File对象创建一个 FileInputStream
FileInputStream(String name) 通过文件路径创建一个 FileInputStream
(3)FilterInputStream:过滤流,是一种扩展输入流功能的类(装饰器),它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能
(4)BufferedInputStream:在创建 BufferedInputStream 时,会创建一个内部缓冲区数组,利用缓冲区来提高读数据的效率
先把一批数据读入到缓冲区,接下来read()方法只需要到缓冲区内获取数据,就能减少物理性读取数据的次数。
构造方法:
BufferedInputStream(InputStream in) 通过底层流,创建一个 BufferedInputStream
BufferedInputStream(InputStream in, int size) 通过底层流,创建具有指定缓冲区大小的 BufferedInputStream
(5)DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型(类型转换请查看源代码)
构造方法:
DataInputStream(InputStream in) 使用指定的底层 InputStream 创建一个 DataInputStream
2、字节输出流
(OutputStream,FileOutputStream,BufferedOutputStream,DataOutputStream)
(1)OutputStream:此抽象类是表示输出字节流的所有类的超类
void close()关闭此输出流并释放与此流有关的所有系统资源
void flush() 刷新此输出流并强制写出所有缓冲的输出字节
void write(byte[] b) 将 b.length 个字节从指定的 byte 数组写入此输出流
void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
(2)FileOutputStream:文件输出流是用于将数据写入 File 的输出流
构造方法摘要
FileOutputStream(File file)创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。
//append表示是否追加到文件末尾,还是覆盖源文件内容
FilterOutputStream
直接子类:
BufferedOutputStream,
DataOutputStream,
PrintStream: 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式(自动刷新)
构造方法:
PrintStream(File file)创建具有指定文件且不带自动行刷新的新打印流。
PrintStream(OutputStream out) 创建新的打印流。
PrintStream(OutputStream out, boolean autoFlush)创建新的打印流。
PrintStream(OutputStream out, boolean autoFlush, String encoding)创建新的打印流。
PrintStream(String fileName) 创建具有指定文件名称且不带自动行刷新的新打印流。
常用方法:
public PrintStream append(char c);将指定字符添加到此输出流
public void println(char x)//换行,插入
public void write(int b) //要写入将根据平台的默认字符编码转换的字符,请使用 print(char) 或 println(char) 方法
按照平台的默认字节编码将 String.valueOf(int) 生成的字符串转换为字节,并完全以 write(int) 方法的方式写入这些字节
3、文件读写步骤
(1)创建文件对象
File file1 = new File("data.txt");
File file2 = new File("dest.txt");
(2)创建读出/写入操作的对象
文件对象仅仅表示文件本身,对文件进行读/写操作还需要读/写操作对象来完成。
读出文件中的内容采用FileInputStream对象,在文件中写入内容采用FileOutputStream对象。
InputStream inputStream = new FileInputStream(file1);
OutputStream outputStream = new FileOutputStream(file1);
说明:写入和读出操作对象必须和具体的文件对象关联起来,而文件对象又是和具体的文件关联的。
(3)数据文件的读/写操作
inputStream.read();
outputStream.write();
(4)关闭资源
inputStream.close();
outputStream.close();
四、字符流
1、Reader:用于读取字符流的抽象类
方法:
int read() 读取单个字符
int read(char[] cbuf) 将字符读入数组
int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分
void close() 关闭该流并释放与之关联的所有资源
(1) FileReader:
extends InputStreamReader extends Reader用于读取字符流
构造方法:
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader
(2)BufferedReader:
extends Reader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取,可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求
因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)
构造方法:
BufferedReader(Reader in)创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流
readLine() 读取一个文本行
2 Writer:
写入字符流的抽象类
Writer append(char c) 将指定字符添加到此 writer。
void close() 关闭此流,但要先刷新它。
void flush() 刷新该流的缓冲。
void write(char[] cbuf) 写入字符数组。
void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。
void write(int c) 写入单个字符。
void write(String str) 写入字符串。
void write(String str, int off, int len) 写入字符串的某一部分。
(1)FileWriter:
构造方法:
FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象
FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
append 表示追加到文件末尾,否则覆盖源文件中的数据
(2) BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
构造方法:
BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。 BufferedWriter(Writer out, int sz) 创建一个使用给定大小输出缓冲区的新缓冲字符输出流
方法摘要
void close() 关闭此流,但要先刷新它。
void flush()刷新该流的缓冲。
void newLine() 写入一个行分隔符。
void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。
void write(int c) 写入单个字符。
void write(String s, int off, int len) 写入字符串的某一部分。
五、字节流与字符流
字节流:以Stream结尾的都是字节流,字节流用于读取二进制数据(图片、视频、音乐)
字符流:结尾都是以Reader/Writer结尾的,字符流用于读取文本数据(txt、jsp、java...)
字节流和字符流转换
InputStreamReader 把字节输入流转换成字符流
OutputStreamWriter 把字符流写到字节流
例子:
用字节流打开文件,然后转成字符流
FileInputStream fis = new FileInputStream("e:/student.c");
InputStreamReader isr = new InputStreamReader(fis);
六、对象的序列化和反序列化
序列化:把一个对象的状态写入一个字节流的过程。如果一个对象引用到其它对象,而这些对象又引用另外的对象,那么所有这些对象都会被序列化。
Serializable接口:
只有实现Serializable接口的对象才能被序列化工具存储或者恢复。
声明为transient的变量不被序列化工具存储。
static变量同样不被存储
七、对象流
ObjectOutputStream:
构造方法:
public ObjectOutputStream(OutputSteam os) 负责向流写入对象:
public void writeObject(Object obj)//obj 序列化的对象
ObjectInputStream:
构造方法:
public ObjectInputStream(InputSteam is)负责从流读出对象(反序列化):
public Object readObject()
ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化
八、配置文件管理
后缀一般为ini或者properties的文件
格式:键 = 值
说明:ini或者properties,多个重复键时,ini只处理第一个,properties处理最后一个。其他差别不明显
Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串
方法及步骤:
1)加载文件流:
void load(InputStream inStream) 从输入流中读取属性列表(键和元素对)
void load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)
2)读取文件信息或者修改文件信息:
String getProperty(String key) 通过键获取值
String getProperty(String key,String defaultValue)通过键获取值。如果未找到键,则此方法返回默认值变量
Object setProperty(String key, String value)调用 Hashtable 的方法 put,通过键修改相应的值 ,如果该键不存在则新增
3)保存到文件流:
void store(OutputStream out, String comments) 以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
void store(Writer writer, String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。
1、绝对路径和相对路径
File类:用来构造文件或文件夹的类,在其构造函数中要求传入一个String类型的参数,用于指示文件所在的路径.这里可以使用绝对路径作为参数,也可以使用相对路径. 使用绝对路径指明了文件的具体路径(如:E:\images\login.gif),java虚拟机(JVM)很容易就能定位到该文件,那么使用的是相对路径jvm又是如何定位文件的呢?
绝对路径名是完整的路径名,不需要任何其他信息就可以定位自身表示的文件。相反,相对路径名必须使用来自其他路径名的信息进行解释。默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。System.getProperty("user.dir")
2、创建文件对象
创建File对象时必须给出文件或文件夹名(可以是相对路径也可以是绝对路径):
File file1 = new File("C:\\java\\aaa.bmp");
File file2 = new File("C:\\Temp");
File file3 = new File("./data.txt");//相对路径:"./"当前目录,
3、检查文件对象是否存在
boolean exists();
4、检查是否为文件
boolean isFile();如果File对象所指的是一个文件,则返回true
5、 操作文件中的相关方法:
5.1、查询文件长度
long length();返回文件长度,文件夹的长度为0
5.2、查询文件修改日期
long lastModified();返回文件上次修改的日期时间,返回的是从1970年午夜至今文件最后修改时刻的毫秒数,但可以通过Calendar类表示成相对时间。
5.3、获得文件名和相对路径的函数:
String getName(); // getName函数获得文件名,不包含路径
String getPath(); // getPath函数获得文件所在路径和文件名称
String getAbsolutePath(); //获得文件的绝对路径
5.4、重命名/移动文件(本地文件的移动,如果是网络上那么还得通过流的读写)
boolean renameTo(File dest);
作用:给文件或文件夹改名,如果dest所指的路径与文件原来的路径不同的话,就会将文件或文件夹移动到目标位置。
5.5、删除文件/目录
boolean delete();删除File对象所指向的文件或文件夹。如果是文件夹:文件夹必须是空的,否则无法删除
5.6、创建文件
file1.createNewFile();如果文件不存在,则创建一个新文件;如果文件存在, 则不进行任何操作,返回false。
5.7、同样:检查是否是(文件夹)目录、操作目录相关方法、创建目录、删除目录
boolean mkdir();创建一个子目录//保证要创建的子目录上级目录已经存在
boolean mkdirs();创建多个(多层)子目录//如果要创建的子目录的上级目录不存在,则先创建上级目录,再创建子目录
列举出文件夹下的所有文件
file.list();// 当前文件夹下:文件名和文件夹名称
file.listFiles();// 当前文件夹下文件对象
二、文件过滤器
1、FileFilter:
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.getName().endsWith("jpg")) {// 区分大小写,如何不区分? FileNameExtensionFilter 文件扩展名过滤器(文件扩展名的比较不区分大小写)
return true;
}
return false;
}
});
2、FilenameFilter
FilenameFilter filenameFilter = new FilenameFilter() {
public boolean accept(File dir, String name) {
if (name.endsWith("JPG")) { return true;
}
return false;
}
};
//文件名过滤和文件对象过滤
String[] filenames = file.list(filenameFilter);
File[] files=file.listFiles(filenameFilter);
import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; public class TestFileFilter { /** * @param args */ public static void main(String[] args) { File file = new File( "E:\\软件"); File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { System.out.println("筛选前:" + files[i].getName()); } fileFilter(file); filenameFilter(file); } private static void fileFilter(File file) { File[] files = file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if (pathname.getName().toLowerCase().endsWith(".txt")) { return true; } else { return false; } } }); for (int i = 0; i < files.length; i++) { System.out.println("fileFilter:" + files[i].getName()); } } private static void filenameFilter(File file) { File[] files = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { if (name.toLowerCase().endsWith(".ppt")) { return true; } else { return false; } } }); for (int i = 0; i < files.length; i++) { System.out.println("filenameFilter:" + files[i].getName()); } } }
三、字节流
字节流只能读取字节数据。
字节流读取中文时,会出乱码。因为一个中文字符占两个字节。
字节流:用于读取二进制的数据文件,(如声音,图片,视频等)
1、字节输入流(InputStream,FileInputStream,BufferedInputStream,DataInputStream)
(1)InputStream 此抽象类是表示字节输入流的所有类的超类,以字节为单位
常用方法:
int read()下一个数据字节(0 到 255 范围内的 int 字节值),如果到达流的末尾,则返回 -1
int read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
int read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
void close() 关闭此输入流并释放与该流关联的所有系统资源
(2)直接子类:
FileInputStream :把文件对象转化成输入流。用于读取诸如图像数据之类的原始字节流。
构造方法:
FileInputStream(File file)通过File对象创建一个 FileInputStream
FileInputStream(String name) 通过文件路径创建一个 FileInputStream
(3)FilterInputStream:过滤流,是一种扩展输入流功能的类(装饰器),它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能
(4)BufferedInputStream:在创建 BufferedInputStream 时,会创建一个内部缓冲区数组,利用缓冲区来提高读数据的效率
先把一批数据读入到缓冲区,接下来read()方法只需要到缓冲区内获取数据,就能减少物理性读取数据的次数。
构造方法:
BufferedInputStream(InputStream in) 通过底层流,创建一个 BufferedInputStream
BufferedInputStream(InputStream in, int size) 通过底层流,创建具有指定缓冲区大小的 BufferedInputStream
(5)DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型(类型转换请查看源代码)
构造方法:
DataInputStream(InputStream in) 使用指定的底层 InputStream 创建一个 DataInputStream
2、字节输出流
(OutputStream,FileOutputStream,BufferedOutputStream,DataOutputStream)
(1)OutputStream:此抽象类是表示输出字节流的所有类的超类
void close()关闭此输出流并释放与此流有关的所有系统资源
void flush() 刷新此输出流并强制写出所有缓冲的输出字节
void write(byte[] b) 将 b.length 个字节从指定的 byte 数组写入此输出流
void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
(2)FileOutputStream:文件输出流是用于将数据写入 File 的输出流
构造方法摘要
FileOutputStream(File file)创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。
//append表示是否追加到文件末尾,还是覆盖源文件内容
FilterOutputStream
直接子类:
BufferedOutputStream,
DataOutputStream,
PrintStream: 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式(自动刷新)
构造方法:
PrintStream(File file)创建具有指定文件且不带自动行刷新的新打印流。
PrintStream(OutputStream out) 创建新的打印流。
PrintStream(OutputStream out, boolean autoFlush)创建新的打印流。
PrintStream(OutputStream out, boolean autoFlush, String encoding)创建新的打印流。
PrintStream(String fileName) 创建具有指定文件名称且不带自动行刷新的新打印流。
常用方法:
public PrintStream append(char c);将指定字符添加到此输出流
public void println(char x)//换行,插入
public void write(int b) //要写入将根据平台的默认字符编码转换的字符,请使用 print(char) 或 println(char) 方法
按照平台的默认字节编码将 String.valueOf(int) 生成的字符串转换为字节,并完全以 write(int) 方法的方式写入这些字节
3、文件读写步骤
(1)创建文件对象
File file1 = new File("data.txt");
File file2 = new File("dest.txt");
(2)创建读出/写入操作的对象
文件对象仅仅表示文件本身,对文件进行读/写操作还需要读/写操作对象来完成。
读出文件中的内容采用FileInputStream对象,在文件中写入内容采用FileOutputStream对象。
InputStream inputStream = new FileInputStream(file1);
OutputStream outputStream = new FileOutputStream(file1);
说明:写入和读出操作对象必须和具体的文件对象关联起来,而文件对象又是和具体的文件关联的。
(3)数据文件的读/写操作
inputStream.read();
outputStream.write();
(4)关闭资源
inputStream.close();
outputStream.close();
四、字符流
1、Reader:用于读取字符流的抽象类
方法:
int read() 读取单个字符
int read(char[] cbuf) 将字符读入数组
int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分
void close() 关闭该流并释放与之关联的所有资源
(1) FileReader:
extends InputStreamReader extends Reader用于读取字符流
构造方法:
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader
(2)BufferedReader:
extends Reader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取,可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求
因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)
构造方法:
BufferedReader(Reader in)创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流
readLine() 读取一个文本行
2 Writer:
写入字符流的抽象类
Writer append(char c) 将指定字符添加到此 writer。
void close() 关闭此流,但要先刷新它。
void flush() 刷新该流的缓冲。
void write(char[] cbuf) 写入字符数组。
void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。
void write(int c) 写入单个字符。
void write(String str) 写入字符串。
void write(String str, int off, int len) 写入字符串的某一部分。
(1)FileWriter:
构造方法:
FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象
FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
append 表示追加到文件末尾,否则覆盖源文件中的数据
(2) BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
构造方法:
BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。 BufferedWriter(Writer out, int sz) 创建一个使用给定大小输出缓冲区的新缓冲字符输出流
方法摘要
void close() 关闭此流,但要先刷新它。
void flush()刷新该流的缓冲。
void newLine() 写入一个行分隔符。
void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。
void write(int c) 写入单个字符。
void write(String s, int off, int len) 写入字符串的某一部分。
五、字节流与字符流
字节流:以Stream结尾的都是字节流,字节流用于读取二进制数据(图片、视频、音乐)
字符流:结尾都是以Reader/Writer结尾的,字符流用于读取文本数据(txt、jsp、java...)
字节流和字符流转换
InputStreamReader 把字节输入流转换成字符流
OutputStreamWriter 把字符流写到字节流
例子:
用字节流打开文件,然后转成字符流
FileInputStream fis = new FileInputStream("e:/student.c");
InputStreamReader isr = new InputStreamReader(fis);
六、对象的序列化和反序列化
序列化:把一个对象的状态写入一个字节流的过程。如果一个对象引用到其它对象,而这些对象又引用另外的对象,那么所有这些对象都会被序列化。
Serializable接口:
只有实现Serializable接口的对象才能被序列化工具存储或者恢复。
声明为transient的变量不被序列化工具存储。
static变量同样不被存储
七、对象流
ObjectOutputStream:
构造方法:
public ObjectOutputStream(OutputSteam os) 负责向流写入对象:
public void writeObject(Object obj)//obj 序列化的对象
ObjectInputStream:
构造方法:
public ObjectInputStream(InputSteam is)负责从流读出对象(反序列化):
public Object readObject()
ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化
八、配置文件管理
后缀一般为ini或者properties的文件
格式:键 = 值
说明:ini或者properties,多个重复键时,ini只处理第一个,properties处理最后一个。其他差别不明显
Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串
方法及步骤:
1)加载文件流:
void load(InputStream inStream) 从输入流中读取属性列表(键和元素对)
void load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)
2)读取文件信息或者修改文件信息:
String getProperty(String key) 通过键获取值
String getProperty(String key,String defaultValue)通过键获取值。如果未找到键,则此方法返回默认值变量
Object setProperty(String key, String value)调用 Hashtable 的方法 put,通过键修改相应的值 ,如果该键不存在则新增
3)保存到文件流:
void store(OutputStream out, String comments) 以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
void store(Writer writer, String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Date; import java.util.Properties; public class TestProperty { // 1 创建文件对象 static File file = new File("./config/config.ini"); static FileInputStream fileInputStream = null; static Properties properties = null; static FileOutputStream fileOutputStream = null; static { if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { // 2 创建输入流 fileInputStream = new FileInputStream(file); // 3 创建Properties properties = new Properties(); // 4 加载输入流 try { properties.load(fileInputStream); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 写入到配置文件 public static void setValue(String key, String value) { properties.setProperty(key, value); try { fileOutputStream = new FileOutputStream(file); properties.store(fileOutputStream, "qq config information!"); fileOutputStream.flush(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { fileOutputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static String getValue(String key) { String value = properties.getProperty(key, "8099"); try { fileInputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return value; } /** * @param args */ public static void main(String[] args) { String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORACLE"; String user = "oracle1105"; String password = "oracle1105"; String driver = "oracle.jdbc.driver.OracleDriver"; String port = "8099"; //保存配置信息 TestProperty.setValue("url", url); TestProperty.setValue("user", user); TestProperty.setValue("password", password); TestProperty.setValue("driver", driver); TestProperty.setValue("port", port); //读取配置信息 System.out.println(TestProperty.getValue("url")); System.out.println(TestProperty.getValue("user")); System.out.println(TestProperty.getValue("password")); System.out.println(TestProperty.getValue("driver")); System.out.println(TestProperty.getValue("port")); } }
发表评论
-
java 设计模式
2012-06-11 19:34 8571 单例模式 Singleton模式主要作 ... -
java JDBC编程
2012-06-11 19:30 15271:JDBC Java DataBase Connectiv ... -
java多线程技术
2012-06-09 18:17 1335[size=large] 1 了解程序、进程、线程的概念 ... -
java网络编程socket
2012-06-09 18:03 1465网络通信基本概念 协议:协议是一组在网络上发送信息的规则 ... -
java swing之JTable和JList
2012-06-09 15:16 223791、JTable JTable构造方法: JTable(Tab ... -
java swing基础与事件处理
2012-06-09 15:02 14550一、swing基础 1、平台无 ... -
eclipse常用快捷键
2012-06-08 15:39 0eclipse常用快捷键 Eclipse ... -
java集合框架
2012-06-08 15:33 15451、java集合架构支持3种类型的集合:规则集(Set),线性 ... -
java异常处理
2012-06-08 13:23 974一、Java异常的基础知识 ... -
java系统常用类
2012-06-08 13:07 13091、Object类 构造方法: Object() 常用方法: ... -
java三大特性
2012-06-08 12:44 1330java三大特性: 封装:隐藏对象的属性和实现细节,仅对外公开 ... -
java基础语法
2012-06-08 12:16 10051、环境变量 (1)JAVA_HOME:指明JDK安装路径,就 ...
相关推荐
Java中的IO流是进行输入/输出操作的核心机制,它允许程序与各种数据源(如文件、网络连接、内存缓冲区等)进行数据交换。在Java中,IO流被设计为一个层次化的体系结构,便于理解和使用。这个体系结构是根据流的方向...
Java IO流技术是Java平台中用于处理输入输出的重要机制,其核心在于数据的传输,从数据源到程序或从程序到目的地。在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流...
Java IO流和Socket是Java编程语言中用于处理输入输出和网络通信的重要概念。在这个示例中,我们将深入探讨如何利用Java IO流与Socket实现简单的文本传输。对于初学者来说,理解这两个概念及其交互是非常关键的。 ...
Java IO流是Java编程语言中处理输入和输出的重要机制,它允许程序与各种类型的输入源(如键盘、文件、网络连接)以及输出目标(如显示器、文件、网络)进行交互。在Java中,I/O流被设计为面向对象,使得处理数据变得...
总之,Java IO流是Java编程中不可或缺的一部分,理解和熟练使用IO流能够帮助我们更高效地处理数据输入和输出。通过实际的开发案例,我们可以更好地掌握这些概念,并将其应用于实际项目中,提升代码的效率和质量。
Java IO流是Java编程语言中用于处理输入输出操作的核心组件,尤其在文件操作、设备交互以及数据传输方面扮演着重要角色。在Java中,IO流的概念首次被引入是为了方便数据在不同源和目的地之间流动,它将各种I/O操作...
Java IO编程是Java平台中处理输入输出操作的重要组成部分,它提供了丰富的类库,使得开发者能够高效地进行数据的读取、写入、流的管理和转换。在这个集合中,我们主要探讨的是Java IO在文件读写方面的实践应用。 一...
Java的IO流是Java编程语言中的重要组成部分,它主要用于数据的输入和输出操作。在Java中,IO流被设计为处理任何类型的数据,包括字符、字节甚至对象。本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO...
Java IO 流是Java平台中的核心概念,它用于在不同数据源之间进行数据传输,如文件、网络、内存等。Java IO系统提供了丰富的类库,使得开发者能够方便地处理...理解和熟练掌握Java IO流,对提升Java编程能力至关重要。
Java IO流是Java编程语言中处理输入输出操作的重要部分,尤其在数据传输、文件读写等方面发挥着核心作用。本文将深入探讨Java IO流的基本概念、类型以及它们在实际开发中的应用。 首先,理解IO流的基本概念至关重要...
Java IO流处理是Java编程中一个非常重要的概念,主要用于数据的输入和输出操作。对于Java初学者来说,理解和掌握IO流的基本使用至关重要。在Java中,流被形象地比喻为数据传输的通道,数据可以从一个源头(如文件、...
Java IO流是Java平台核心特性之一,它负责在程序与外部资源之间传输数据。这个概念在Java编程中至关重要,因为它提供了处理输入(读取)和输出(写入)的机制,无论是从键盘、文件、网络还是其他数据源。在本文中,...
在Java编程语言中,IO(Input/Output)流是一组用于处理输入输出操作的类和接口,它们构成了Java IO API。这些类使得程序能够读取数据(输入)、写入数据(输出),并进行文件和网络之间的数据传输。本文将深入探讨...
Java中的IO流是Java语言处理输入输出操作的重要组成部分,它为数据传输提供了强大的支持。本文将深入探讨Java的IO流...在实际编程中,不仅要理解各类流的基本概念,还要学会灵活运用,才能充分发挥Java IO流的优势。
Java IO流是Java编程语言中用于处理输入输出操作的一个重要概念。它允许程序读取数据源或向数据目的地写入数据。Java中的IO流主要分为输入流和输出流两大类,每类又可以根据数据处理方式的不同细分为多种具体实现。...
JavaIO流详解归纳 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...
Java IO流处理是Java编程中一个非常重要的概念,它用于在不同数据源之间传输数据,如文件、网络、内存等。在Java中,IO流分为两大类:输入流(Input Stream)和输出流(Output Stream),它们分别用于数据的读取和...
Java中的IO流是Java平台提供的一种处理输入输出数据的核心机制,广泛应用于文件读写、网络通信、数据转换等场景。IO流分为字节流(Byte Stream)和字符流(Character Stream),它们构成了Java IO系统的基础。 1. *...
在这个项目中,“利用Java的IO流写的一个记事本”是一个用Java编程语言实现的简单文本编辑器,具备基本的新建文件、保存文件等功能。下面将详细探讨Java IO流的原理及其在开发记事本应用中的运用。 首先,Java的IO...