6.10 精度处理类【java.math】
BigDecimal数学计算中精度问题处理。
1.将存在精度问题的数使用类包装
new BigDecimal("" + val) //以串的形式传入
2.运算
add() //+
subtract() //-
multiply() //*
divide() // /
练习:
import java.math.BigDecimal;
public class testde {
public static void main(String[] args) {
double d1 = 1.0;
double d2 = 0.32;
System.out.println(d1-d2);
BigDecimal b1 = new BigDecimal(d1 +"");
BigDecimal b2 = new BigDecimal(d2 +"");
System.out.println(b1.subtract(b2));
System.out.println(0.34*10);
System.out.println(new BigDecimal("0.34").multiply(new BigDecimal("10")));
//System.out.println(4.0 - 3.6);
//System.out.println(0.38 * 10);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/b71934a5bb56ab0c577a8b527981f250.png)
6.11 文件类【java.io】
io:input output 输入输出,和文件息息相关。
文件:用于做数据存储的介质,如ppt,word,txt文件,硬盘,压缩文件,磁盘,光盘.....
操作文件的:java.io.File 【用于操作文件和目录的:仅限于文件外部特性,属性信息】
File类:
构造方法:
new File(String path);
//示例
new File("D:\\1.txt") ; //操作文件
new File("D:\\a") ; //操作目录
new File("D:\\apache-tomcat-8.5.24-windows-x64.zip");
方法:
方法名 | 含义 | 参数 | 返回值 |
exists() | 判断文件和目录【文件,目录】 | boolean | |
getName() | 获取文件目录名字 | ||
length() | 文件长度【字节为单位】 | ||
getPath() | 获取文件目录路径 | ||
canRead() | 是否可读 | ||
canWrite() | 是否可写 | ||
lastModified() | 最后修改时间,时间差 毫秒 | long | |
isFile() | 是否是文件 | boolean | |
createNewFile() | 新建文件 | ||
mkdir() | 新建目录,父目录存在 | ||
mkdirs() | 新建目录,父目录可以不存在,连带 | ||
list() | 列举目录内容 | String[] | |
listFiles() | 列举目录内容【一层】 | File[] | |
listFiles(FileFilter filter) | 列举时过滤信息 | ||
delete() | 删除文件和空目录 【文件,目录】 |
文件例子:
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class testfile {
public static void main(String[] args) {
File f = new File("E:\\1.txt");
if(f.exists()) {
//获得信息
//文件名
System.out.println(f.getName());
//文件长度
System.out.println(f.length());
//文件路径
System.out.println(f.getPath());
//是否可读可写
System.out.println(f.canRead());
System.out.println(f.canWrite());
//最后修改时间
Date d = new Date(f.lastModified());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(d));
}else {
//创建
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/99386357961d2f16863054faa6919196.png)
目录例子:
import java.io.File;
public class testindex {
public static void main(String[] args) {
File f = new File("E:\\Test\\1");
if(!f.exists()) {
f.mkdirs();
}else {
String [] names = f.list();
//遍历全部
// for(String n : names) {
// System.out.println(n);
// }
File []files = f.listFiles( );
for(File file : files) {
if(file.isDirectory()) {
System.out.println("目录:" + file.getName());
}else {
System.out.println("文件:" + file.getName() + "," + file.length());
}
}
}
}
}
列举筛选:
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class f02 {
public static void main(String[] args) throws IOException {
File f = new File("E:\\Test\\1");
/* File [] files = f.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
// TODO Auto-generated method stub
return f.getName().endsWith(".ini");
}
});
*/
File[] files = f.listFiles(a->a.getName().endsWith(".ini"));
File [] file1 = f.listFiles(a->a.getName().length()==5);
FileInputStream fis = new FileInputStream(new File("E:\\Test\\1\\1.txt"));
int a = fis.read(); //每次读1字节,读不到返回-1
while(a!=-1) {
System.out.println((char)a);
a=fis.read();
}
fis.close();//关闭流
for (File file : file1) {
System.out.println(file);
}
}
}
6.12 文件读写类【java.io】
文件的读写操作。
流:Stream。 一连串的数据传输信号,数据传输的通道,能够实现文件读写桥梁。
6.12.1 流的分类
1. 流的方向划分: 【参照物: 程序员】
输入流 : 读文件
输出流 : 写文件
2. 文件类型划分:
文件分为字节型文件 : 二进制文件,按字节存储,.doc .mp4 .jpg
文件分为字符型文件 : 文本文件,按照字符存储,.txt .ini .java
字节流
字符流
3. 文件传输量
节点流 : 接触文件,读写数据量小
缓冲流 : 借助节点流,加大数据量
![](https://i-blog.csdnimg.cn/blog_migrate/381f1c9047f39f4318ca0ca86ce77da9.png)
InputStream 字节输入流
FileInputStream 文件字节输入流
OutputStream
FileOutputStream 文件字节输出流
Reader 字符输入流
FileReader
Writer 字符输出流
FileWriter
BufferedReader 缓冲输入流
BufferedReader 缓冲输出流
6.12.2 FileInputStream
字节输入流,专用于读字节型文件。
构造方法:
new FileInputStream(File file) ;
方法:
read(); // int 每次读取1字节 ,读不到返回-1
read(byte[] b);
close(); //流关闭
例子:
public class TestInputStream {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream(new File("D:\\2.txt"));
int a = fis.read();
while(a != -1) {
System.out.println((char)a);
a = fis.read();
}
fis.close();
}
}
6.12.3 FileOutputStream
字节输出流,专用于写入字节型文件
构造方法:【写入文件时,自动新建文件】
new FileOutputStream(File file) ; //覆盖写入
new FileOutputStream(File file,true) ; //追加写入
方法:
write(int i); // int 每次读取1字节 ,读不到返回-1
write(byte[] b);
close(); //流关闭
练习: 将2.txt 复制到3.txt 【文本复制】
public class TestCopy {
public static void main(String[] args) throws IOException {
FileInputStream f1 = new FileInputStream("D:\\apache-tomcat-8.5.24-windows-x64.zip");
FileOutputStream f2 = new FileOutputStream("D:\\copy.zip");
int a = f1.read();
while(a != -1) {
f2.write(a);
a = f1.read();
}
f1.close();
f2.close();
}
}
读写操作数:
public class TestCopy2 {
public static void main(String[] args) throws IOException {
FileInputStream f1 = new FileInputStream("D:\\apache-tomcat-8.5.24-windows-x64.zip");
FileOutputStream f2 = new FileOutputStream("D:\\copy3.zip");
byte[] b = new byte[1024];
int a = f1.read(b);
while(a != -1) {
f2.write(b);
a = f1.read(b);
}
f1.close();
f2.close();
}
}
6.12.4 FileReader
读取字符型文件,用法同FileInputStream。
public class TestReader {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("D:\\2.txt");
int a = fr.read();
while(a != -1) {
System.out.println((char)a);
a = fr.read();
}
fr.close();
}
}
6.12.5 FileWriter
例子:
public class TestWriter {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("D:\\5.txt");
fw.write("welcome");
fw.write("\r\n");
fw.write("Miss Yu");
fw.write("\r\n");
fw.write("我爱我的祖国");
fw.close();
}
}
6.12.6 BufferedReader
字符输入流中读取文本,缓冲各个字符,字符流看成节点流,BufferedReader是缓冲流【处理流,过滤流】,加大缓冲,提高读文件的效率,不会直接接触文件,通过字符流操作。
public class BufferedReader extends Reader{}
构造方法:
BufferedReader(Reader in) ;
方法:
readLine() ; 每次读取一行 String ,没有返回null
close(); 关闭相干的所有资源
public class TestBufferedReader {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("D:\\2.txt");
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while(s != null) {
System.out.println(s);
s = br.readLine();
}
br.close();
}
}
6.12.7 BufferedWriter
同上
方法:
write(String s);
newLine() 换行
flush() 刷新,在关闭
close();
public class TestBufferedWriter {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("D:\\6.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("我爱中国");
bw.newLine();
bw.write("我是中国人");
bw.flush();
bw.close();
}
}