Java高级编程–输入和输出处理
文章目录
1.Java I/O
2.文件
2.1什么是文件?
- 相关记录或放在一起的数据的集合
2.2Java程序如何访问文件属性?
- JAVA API :
java.io.File
类
2.3File类访问文件属性
创建File对象
//Windows操作系统
File file=new File("d:\\test.txt");
//Linux操作系统
File file1=new File("d:/test.txt");
2.4File类的常用方法
方法名称 | 说明 |
---|---|
boolean exists( ) |
判断文件或目录是否存在 |
boolean isFile( ) |
判断是否是文件 |
boolean isDirectory( ) |
判断是否是目录 |
String getPath( ) |
返回此对象表示的文件的相对路径名 |
String getAbsolutePath( ) |
返回此对象表示的文件的绝对路径名 |
String getName( ) |
返回此对象表示的文件或目录的名称 |
boolean delete( ) |
删除此对象指定的文件或目录 |
boolean createNewFile( ) |
创建名称的空文件,不创建文件夹 |
long length() |
返回文件的长度,单位为字节,如果文件不存在,则返回0L |
//将文件封装为一个File类的对象
File file= new File("D:\\2.txt");
System.out.println("文件名称:"+file.getName());
System.out.println("文件绝对路径"+file.getAbsolutePath());
System.out.println("文件相对路径"+file.getPath());
System.out.println("文件大小:"+file.length()+"字节");
System.out.println("文件是否存在:"+file.exists());
System.out.println("文件是否删除:"+file.delete());
3.流
3.1如何读写文件?
- 通过流来读写文件
- 流是一组有序的数据序列
- 以先进先出方式发送信息的通道
3.2输入/输出流与数据源
3.3Java流的分类
注:输入输出流是相对于计算机内存来说的
注:字节流是 8 位通用字节流,字符流是 16 位 Unicode 字符流
3.4输入流Input (读取)
InputStream->FilelnputStream(路径|File对象)
InputStream
类常用方法- int read( )
- int read(byte[] b) read(字节数组)丨read()返回字节
- int read(byte[] b,int off,int
len
) - void close( ):释放资源
- int available():可以从输入流中读取的字节数目
子类
FileInputStream
常用的构造方法FileInputStream(File file)
FileInputStream(String name)
使用
FileInputStream
读文本文件
package com.hz.test01;
//引入相关的类
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Test2 {
public static void main(String[] args) throws IOException {
InputStream fis = null;
try {
fis = new FileInputStream("D:\\2.txt");
byte[] bytes = new byte[fis.available()];
//读取文本文件的数据
fis.read(bytes);
String s = new String(bytes);
System.out.println(s);
//关闭文件流对象
fis.close();
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
if (fis != null)
fis.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
3.5输出流Output(写入)
OutputStream->FileOutputStream(路径,boolean是否追加)
OutputStream类常用方法
write(字符串.getBytes(“编码”))写入内容
void write(int c)
void write(byte[] buf)
void write(byte[] b,int off,int len)
void close():释放资源
void flush():强制把缓冲区的数据写到输出流中
子类FileOutputStream常用的构造方法
FileOutputStream (File file)
FileOutputStream(String name)
FileOutputStream(String name,boolean append)
注:
- 前两种构造方法在向文件写数据时将覆盖文件中原有的内容
- 创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件
- 使用FileOutputStream 写文本文件
//构造文件输入流FileOutputStream对象
FileOutputStream fos=new FileOutputStream("D:\\test.txt");
String s="Java";
byte[] words=s.getBytes();
//把数据写入文本文件
fos.write(words,0, words.length);
//关闭文件流对象
fos.close();
FileOutputStream fos = null;
try {
//true表示追加写入
fos = new FileOutputStream("D:\\test.txt",true);
String s = "爱Java";
//把数据写入文本文件
fos.write(s.getBytes());
//把数据写入文本文件
fos.close();
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
if (fos != null)
fos.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
4.输入流Reader读取
Reader->InputStreamReader(InputStream,编码)->FileReader(路径|File对象)
- Reader类常用方法
- int read( )
- int read(char[] c):字符数组
- read(char[] c,int off,int len)
- void close( ):释放资源
- 子类InputStreamReader常用的构造方法
- InputStreamReader(InputStream in)
- InputStreamReader(InputStream in,String charsetName)
5.FileReader类
FileReader类是InputStreamReader的子类
- FileReader(File file)
- FileReader(String name)
该类只能按照本地平台的字符编码来读取数据,用户不能指定其他的字符编码类
- System.out.println(System.getProperty(“file.encoding”)); 获得本地平台的字符编码类型
使用FileReader读取文件
//引入相关的类
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Test03 {
public static void main(String[] args) {
Reader fr = null;
try {
//创建FileReader对象
fr = new FileReader("D:\\2.txt");
//读取文本文件的数据
char[] chars = new char[100];
fr.read(chars);
String msg=new String(chars);
System.out.println(msg);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
fr.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
6.缓冲区BufferedReader
- 如何提高字符流读取文本文件的效率
使用FileReader类与BufferedReader类
BufferedReader类是Reader类的子类
BufferedReader类带有缓冲区
按行读取内容的readLine()方法
BufferedReader常用的构造方法
- BufferedReader(Reader in)
子类BufferedReader特有的方法
- readLine()
使用 BufferedReader读文本文件
//引入相关的类
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Test03 {
public static void main(String[] args) throws IOException {
Reader fr = null;
BufferedReader br = null;
try {
//构造BufferedReader对象和FileReader对象
fr = new FileReader("D:\\2.txt");
br = new BufferedReader(fr);
//调用readLine()方法读取数据
System.out.println(br.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
br.close();
fr.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
- 解决读取时中文乱码
FileInputStream fis=new FileInputStream("D:\\test.txt");
//使用InputStreamReader并设置编码格式
InputStreamReader fr=new InputStreamReader(fis,"UTF-8");
BufferedReader br=new BufferedReader(fr);
//调用readLine()方法读取数据
br.readLine();
//关闭文件流对象
br.close();
fr.close();
7.输出流Writer写入
Writer->OutputStreamWriter(字节流,编码)->FileWriter(File对象|路径,boolean是否追加)
Writer类常用方法
write(String str)
write(String str,int off,int len)
void close()
void flush()
子类OutputStreamWriter常用的构造方法
- OutputStreamWriter(OutputStream out)
- OutputStreamWriter(OutputStream out,String charsetName)
8.FileWriter类
FileWriter类是OutputStreamWriter的子类
FileWriter (File file)
FileWriter (String name)
该类只能按照本地平台的字符编码来写数据,用户不能指定其他的字符编码类型
使用FileWriter写文件
//引入相关的类
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test04 {
public static void main(String[] args) {
Writer fw = null;
try {
//创建FileReader对象
fw = new FileWriter("D:\\test.txt");
//写文本文件
fw.write("hello,world");
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
fw.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
9.缓冲区BufferedWriter
如何提高字符流写文本文件的效率?
使用FileWriter类与BufferedWriter类
BufferedWriter类是Writer类的子类
BufferedWriter类带有缓冲区
BufferedWriter常用的构造方法
//引入相关的类
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Test04 {
public static void main(String[] args) {
FileWriter fw = null;
try {
//构造BufferedWriter对象和FileWriter对象
fw = new FileWriter("D:\\test.txt");
BufferedWriter bf = new BufferedWriter(fw);
//调用write()方法写数据
bf.write("Java");
bf.newLine();
bf.write("Hello World");
//流对象的清空和关闭flush()和close()
bf.flush();
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
fw.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}