System.out.println(“文件创建成功”);
File f = new File(“D:\myfile\abc.txt”); //D盘路径
f.createNewFile(); //创建
System.out.println(“文件创建成功…”);
System.out.println(“绝对路径:” + f.getAbsolutePath()); //windows加盘符路径
System.out.println(“上一级文件夹对象:” + f.getParentFile());
System.out.println(“是否可读:” + f.canRead());
System.out.println(“是否隐藏:” + f.isHidden());
System.out.println(“当前盘可用空间:” + (f.getFreeSpace()/1024/1024/1024)+“G”);
System.out.println("是否是文件夹: " + f.isDirectory());
System.out.println("是否是文件: " + f.isFile());
System.out.println(new Date(f.lastModified()));
创建文件,创建文件夹,列出所有文件;
判断文件对象为文件,还是文件夹;
File file = new File(“D:\Program Files (x86)\FileRecv”);
System.out.println(file.isFile()); // 文件对象为文件
System.out.println(file.isDirectory()); // 文件对象为文件夹
File[] files = file.listFiles(); // 列出所有文件
System.out.println(Arrays.toString(files));
// 创建文件,用createNewFile()方法,文件加后缀
File newfile = new File(“D:\Program Files (x86)\newFile.txt”);
try {
newfile.createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
// 创建文件夹 mkdir:创建单级目录;mkdirs: 创建多级目录
File fileDir = new File(“D:\Program Files (x86)\FileRecv”);
fileDir.mkdir();
3.图形界面JFileChooser
JFileChooser chooser = new JFileChooser();
// 过滤特定的格式,图片格式
FileNameExtensionFilter filter = new FileNameExtensionFilter(
“JPG & GIF Images”, “jpg”, “gif”);
chooser.setFileFilter(filter);
// parent为null表示出现屏幕中间
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {
// 获取文件名
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
// 获取绝对路径
System.out.println(“路径为”+chooser.getSelectedFile().getAbsolutePath());
4.字节流(byte)In/OutputStream—图片等二进制
字节流以字节为单位进行读写,适用于处理二进制数据,如图片、音频、视频等文件。Java中的字节流主要有InputStream和OutputStream两个抽象类,它们的子类可以实现对文件、网络、内存等不同数据源的读写操作。
输出字节(byte)流
用OutputStream out = new FileOutputStream(“D:\IOTest\ioTest1.txt”);
package com.tianju.test;
import java.io.*;
public class OutputStreamDemo1 {
public static void main(String[] args) throws IOException {
// 输出流,从内存写入文件,用out
// 文件不存在会被创建出来
OutputStream out = new FileOutputStream(“D:\IOTest\ioTest1.txt”);
out.write(98); // 为小写b
out.write(90); // 为小写z
out.flush();
out.close(); // 记得关闭
// 输入字节流,写入内存,用in
InputStream in = new FileInputStream(“D:\IOTest\ioTest1.txt”);
int n1 = in.read();
int n2 = in.read();
System.out.println(“n1为”+n1+“,n2为”+n2);
// 转换成char
System.out.println(“n1为”+(char)n1+“,n2为”+(char)n2);
in.close();
}
}
视频文件拷贝解决方案
采用缓存(块)提高效率
byte[] buffer = new byte[1024*1024]; // 1M大小的缓存块
package com.tianju.test;
import java.io.*;
public class CopyVideoDemo1 {
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(“C:\Users\82646\Pictures\VID_20211111_220500.mp4”);
OutputStream out = new FileOutputStream(“D:\IOTest\copy1.mp4”);
int n = 0;
byte[] buffer = new byte[1024*1024]; // 1M大小的缓存块
double beginTime = System.currentTimeMillis();
while (true){
n = in.read(buffer);
if (n==-1){
break;
}
out.write(buffer);
}
out.close();
in.close();
double endTime = System.currentTimeMillis();
System.out.println(“拷贝耗时”+(endTime-beginTime)+“毫秒”);
}
}
问题:文件大小变大,原因是最后一次存了缓存块大小的空数据
解决方法:
out.write(buffer,0,n); //从数组中读取0,到长度(实际存入的长度值n)
5.字符流Reader/Writer—字符文本数据
字符流= 字节流包装 + 编码 内置缓存—文字
字符流以字符为单位进行读写,适用于处理文本数据,如文本文件、配置文件等。Java中的字符流主要有Reader和Writer两个抽象类,它们的子类可以实现对文本文件、网络、内存等不同数据源的读写操作。
字符流和字节流之间可以通过Java中的InputStreamReader和OutputStreamWriter类进行转换,例如将字节流转换为字符流可以使用InputStreamReader类,将字符流转换为字节流可以使用OutputStreamWriter类。
BufferedReader的使用;
readLine() 方法
public class BUfferReaderDemo1 {
public static void main(String[] args) throws IOException {
String filePath = “D:\Myprogram\idea-workspace\IOStrem\IOStrem\src\com\tianju\resources\login.Properties”;
BufferedReader in = new BufferedReader(
new FileReader(filePath));
String line = null;
while (true){
line = in.readLine();
if (line==null){
break;
}
System.out.println(line);
}
in.close();
}
}
上面简介:
public class BUfferReaderDemo2 {
public static void main(String[] args) throws IOException {
String filePath = “D:\Myprogram\idea-workspace\IOStrem\IOStrem\src\com\tianju\resources\login.Properties”;
BufferedReader in = new BufferedReader(
new FileReader(filePath));
String line = null;
while ((line=in.readLine())!=null){
System.out.println(line);
}
in.close();
}
}
6.递归在IO中的应用
递归实压栈和出栈的过程,Stack
写递归的关键是通式和终止条件:
以阶乘为例:
通式:f(n) = n * f(n-1)
终止条件:n=1;f(1) = 1
业务:列举出某个文件夹下所有的文件、文件夹
问题:循环无法解决,难以确定循环次数,文件嵌套文件
解决方案:采用递归的方法
- 临界点:找到文件终止,File f ——> f.isFile()
- 一般规律:File f
如果f为文件夹,File[] fs = f.listFile() ——> 找出所有的文件对象
如果f不为空,则继续对内部每个进行上述过程;
for(File fi : fs){ }
如果是隐藏文件,会出现NullPointerException异常,需要判断
/**
* 递归找到所有的java文件
* @param filePath 文件夹路径
*/
public static void findJavaFile(String filePath) throws IOException {
File file = new File(filePath);
// 判断文件,且后缀为java
if(file.isFile() && file.getName().toLowerCase().endsWith(“java”)){
System.out.println(file.getAbsoluteFile());
// 统计代码行数
int codeLines = CountCodeLines(file.getAbsoluteFile().toString());
}
File[] files = file.listFiles();
if (files !=null){
for (File f:files){
findJavaFile(f.getAbsolutePath());
}
}
}
需求:统计某个路径下的java代码行数
package com.tianju.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class CountCodeLines {
public static void main(String[] args) throws IOException {
String filePath = “D:\Myprogram\idea-workspace”;
countJavaCodeLines(filePath);
System.out.println(“代码的总行数”+num);
}
/**
* 定义静态的全局变量,用于统计代码总行数
*/
public static int num = 0;
/**
* 计算代码行数的入口程序
* @param filePath 文件夹路径
* @throws IOException 抛出异常
*/
public static void countJavaCodeLines(String filePath) throws IOException{
File file = new File(filePath);
if(file.isFile() && file.getName().toLowerCase().endsWith(“java”)){
// 统计代码行数
int codeLines = CountCodeLines(file.getAbsoluteFile().toString());
num+=codeLines;
}
File[] files = file.listFiles();
if (files !=null){
for (File f:files){
countJavaCodeLines(f.getAbsolutePath());
}
}
}
/**
* 统计java代码行数
* @param filePath 文件夹的路径
* @throws IOException 抛出异常
* @return 代码行数int
*/
public static int CountCodeLines(String filePath) throws IOException {
File file = new File(filePath);
BufferedReader in = new BufferedReader(new FileReader(file));
int count = 0;
while (true){
String line = in.readLine(); // 读取行
if (line==null){
break;
}
count++;
}
in.close();
System.out.println(file.getName()+“的行数”+count);
System.out.println(“当前总计代码行数”+num);
return count;
}
}
IO流在项目中的应用
1.Properties类-配置文件降低耦合
使用配置文件降低耦合
将文件和对象关联,key(String) - value(String),常用来解决配置问题,
如果key值不存在,返回为null
例子:登陆的用户名和密码配置
1.创建文件,后缀需要是.Properties,例如:login.Properties
2.进行配置设置,键值对,用=隔开
3.编写主要逻辑代码
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
中…(img-x5OxQuZf-1712972037297)]
[外链图片转存中…(img-bX8aGwEv-1712972037298)]
[外链图片转存中…(img-KAvQO5fB-1712972037299)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-G9jBCpgn-1712972037299)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!