文件(File)操作——I/O流
Windows(大多数)进行文件操作的类File。
文件?文件夹?路径?
文件
能够使用工具打开操作的,文件是不能存储文件的。
一般文件具有后缀——.mp4
文件夹
存储文件的
路径问题——“/”
正右\ 反左/ ——统一朝左(linux)
相对路径
在命令行中输入。
. 当前
… 上一级
操作系统有关
Linux : CentOs—> RedHat
开发者模式(安卓),linux的内核程序(基础)。
Hello文件
路径
Windows: win11/win10: D:\H_J_2312暑期\20240710\video\abc.mp4
文件对象
File f= new File(PATH);
api操作
createNewFile()
创建新文件
delete()
删除当前文件
package com.ffyc.file;
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class FileDemo {
public static void main(String[] args) throws Exception {
final String PATH = "D:/test/";
File f= null;
for (int i = 0; i < 10; i++) {
String fileName = PATH+"apple"+i+".txt";
f = new File(fileName);//文件对象
f.createNewFile();//会自动识别,文件名相同则不会创建
}
/**
* 删除文件
*/
f = new File("D:/test/apple5.txt");
f.delete();
/**
* 改文件属性高的时间
*/
f = new File("D:/test/apple6.txt");
f.setLastModified(new Date().getTime());
f.setWritable(false);//只读; true可写
//f.mkdir();//创建文件夹
}
}
多文件操作
list()–>String[]
列出所有对象名称
listFiles()–>File[]
列出文件(夹)对象
package com.ffyc.file;
import java.io.File;
public class FilesDemo01 {
public static void main(String[] args) {
final String PATH = "D:/test";
File files = new File(PATH);
String[] list = files.list();//1名称
/**
* 扫描文件夹下所有的文件夹,文件名称
*/
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
File[] files1 = files.listFiles();//2对象
for (File f : files1){
if (f.isDirectory()){
//System.out.println("文件夹对象-->" + f);
System.out.println("文件夹名称:" + f.getName());
}else {
System.out.println("文件-->"+f);
}
}
}
}
FileChooser
package com.ffyc.file;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.io.File;
public class JFileChooserDemo02 {
public static void main(String[] args) {
JFileChooser chooser = new JFileChooser();//创建文件选择器对象
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
/**
* 过滤选择的文件类型(后缀)
*/
// FileNameExtensionFilter filter = new FileNameExtensionFilter(
// "JPG & GIF Images", "jpg", "gif");
// chooser.setFileFilter(filter);
//显示界面,点击 打开 or 取消
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {//选项按钮
// System.out.println("你选择打开的文件: "
// +
// chooser.getSelectedFile() );
//chooser.getSelectedFile().getName());
File selectedFile = chooser.getSelectedFile();
for (File file : selectedFile.listFiles()){//列出所有文件对象
System.out.println(file.getName());
}
}
}
}
查询指定文件夹下的所有文件
package com.ffyc.file;
import javax.swing.*;
import java.io.File;
/**
* 查询指定文件夹下的所有文件
* 使用递归
*/
public class FinAllFilesDemo03 {
static int count = 0;
public static void f(File file){
if (file.isFile()){//终止条件
// System.out.println(file.getName());
if (file.getName().endsWith("jpg")){//找后缀是.jpg的图片打印
System.out.println(file.getName());
count++;
}
return;
}
//一般规律
File[] files = file.listFiles();
if (files != null) {
for (File x : files){
f(x);
}
}
}
public static void main(String[] args) {
// final String PATH = "D:/test/";
// File f = new File(PATH);
// f(f);
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = chooser.showOpenDialog(null); //显示界面,点击“打开”,"取消"
if (returnVal == JFileChooser.APPROVE_OPTION) {
File selectedFile = chooser.getSelectedFile();
f(selectedFile);
}
System.out.println("图片数量:"+count);
}
}
package com.ffyc.file;
import javax.swing.*;
import java.io.File;
/**
* 查询指定文件夹下的所有文件
* 使用递归
*/
public class FinAllFilesDemo03 {
static int count = 0;
public static void f(File file){
if (file.isFile()){//终止条件
// System.out.println(file.getName());
if (file.getName().endsWith("jpg")){//找后缀是.jpg的图片打印
System.out.println(file.getName());
count++;
}
return;
}
//一般规律
File[] files = file.listFiles();
if (files != null) {
for (File x : files){
f(x);
}
}
}
public static void main(String[] args) {
// final String PATH = "D:/test/";
// File f = new File(PATH);
// f(f);
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = chooser.showOpenDialog(null); //显示界面,点击“打开”,"取消"
if (returnVal == JFileChooser.APPROVE_OPTION) {
File selectedFile = chooser.getSelectedFile();
f(selectedFile);
}
System.out.println("图片数量:"+count);
}
}
流(Stream)–>抽象概念–对硬盘操作
出内存叫写,入内存叫读。
hard disk 硬盘
keyboread键盘
破坏硬盘的操作:拆开破坏真空环境,消磁。
Out出内存–写入
字节流–不能出现中文,因为会出现乱码。
8位
package com.ffyc.stream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class OutputStreamDemo01 {
public static void main(String[] args) throws Exception {
final String PATH = "D:/test/out.txt";
File file = new File(PATH);
OutputStream outputStream = new FileOutputStream(file);//创建新对象
outputStream.write('a');
outputStream.write('p');
outputStream.write('p');
outputStream.flush();//冲马桶
outputStream.close();//打开后关闭这条通道
}
}
In——读入数据
-1 ——>EOF
package com.ffyc.stream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class InputStreamDemo02 {
public static void main(String[] args) throws Exception {
InputStream inputStream = new FileInputStream("D:/test/out.txt");
while (true) {
int read = inputStream.read();
if (read == -1) break;//返回-1代表到达文件末尾
System.out.print((char) read);
}
inputStream.close();;
}
}
app+le(,append: true)
false——覆盖掉之前结果<一般情况下>
文件拷贝
小结:流
- 回顾IO
- 字符输出流
- 包装类型
- 对象流
字节流
硬盘缓存
- "字节流"写入writ——在没写flush()的情况下成功了。
package com.ffyc.review;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamDemo01 {
public static void main(String[] args) throws Exception {
OutputStream outputStream
= new FileOutputStream("D:/test/o2out.txt");
/**
* "字节流"写入write
* 在没写flush()的情况下成功了。
*/
outputStream.write('A');
outputStream.write('B');
outputStream.write('C');
Thread.sleep(1000*60);//同时再创建一个相同文件传,后面运行的文件会把之前写的内容覆盖
}
}
抽象类
字符流——字节流的包装类
能够以字符方式输出,相当于两个字节流合起来,需要flush()。
package com.ffyc.review;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class WriterDemo03 {
public static void main(String[] args) throws Exception {
File file = new File("D:\\test\\dog.txt");
Writer out = new FileWriter(file);
out.write("hello");
out.flush();
//out.close();
out.write("哈比");
out.flush();
out.write("轰隆隆~");
out.flush();
}
}
输出结果:
Print Writer() ——>分行文字
目标:
—>包装处理 外加图片
package com.ffyc.review;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class WriterDemo04 {
public static void main(String[] args) throws Exception {
File file = new File("D:\\test\\诗歌.html");
PrintWriter printWriter = new PrintWriter(file);
printWriter.println("<h1>李白——将进酒</h1>");
printWriter.println("<style>img{width:150px;height:150px}</style>");
printWriter.println("<img src = 'https://ts1.cn.mm.bing.net/th?id=OIP-C.zWnfMFdbxf9PsQKiZHXvHgHaHa&w=200&h=200&c=9&rs=1&qlt=99&o=6&dpr=1.3&pid=13.1'>");
printWriter.println(("<p>君不见黄河之水天上来,</p>"));
printWriter.println("<p>奔流到海不复回。</p>");
printWriter.flush();
printWriter.close();
}
}
结果:
放视频
package com.ffyc.review;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class WriterDemo04 {
public static void main(String[] args) throws Exception {
File file = new File("D:\\test\\诗歌.html");
PrintWriter printWriter = new PrintWriter(file);
printWriter.println("<h1>李白——将进酒</h1>");
printWriter.println("<style>img{width:150px;height:150px}</style>");
printWriter.println("<img src = 'https://ts1.cn.mm.bing.net/th?id=OIP-C.zWnfMFdbxf9PsQKiZHXvHgHaHa&w=200&h=200&c=9&rs=1&qlt=99&o=6&dpr=1.3&pid=13.1'>");
printWriter.println("<video src = 'C:\\Users\\dell\\Desktop\\34.mp4' width='320' height='240' controls></vedio>");
printWriter.println(("<p>君不见黄河之水天上来,</p>"));
printWriter.println("<p>奔流到海不复回。</p>");
printWriter.flush();
printWriter.close();
}
}
字符输入流:Reader()
一般读都没有flush()
爬
转化为指定编码
根据后缀习惯看出
io应用——数据解析
ReadHtml
正好博主给大家推荐一个很好的编程学习软件:
package com.ffyc.stream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
public class ReadHtml {
public static void main(String[] args) throws Exception {
String path = "https://m.w3cschool.cn/html/html-intro.html";
URL url = new URL(path);
//字节转成字符流
InputStream inputStream = url.openStream();
Reader reader = new InputStreamReader(inputStream);
BufferedReader in = new BufferedReader(reader);
String line = null;
while ((line = in.readLine()) != null){
System.out.println(line);
}
in.close();
}
}