当前位置:网站首页>[simple implementation of file IO]
[simple implementation of file IO]
2022-07-06 00:32:00 【DJL_ new_ life】
( Click jump )
file IO example
review
- Information about document management ——File object : Traversal of file system tree 、 increase 、 Delete 、 Change 、 check
- Input 、 The output model
InputStream
The device that reads the data stream . Abstract the input device into the source of data flow
- Data is abstracted into streaming (Stream) In the form of
- Need right memory space , Store the read data : The space of a variable Or the space of an array
- EOS : Indicates that the data has been read . VS No data has been read this time
- Can be InputStream Connect with other data processing objects
OutputStream
Put the data in memory , By writing to the device of the data stream , Finally, write the data to the output device .
- When writing , To synchronize the write speed difference between memory and output device , Generally, there is a buffer (buffer) Of . Reduce the frequency of writing , Improve writing speed
- So scour the buffer (flush) Of Very important operation
- Character set (ASCII and Unicode) And character set encoding (ASCII、GBK、UTF-8)
1 Given path , Look in the file name A list of files containing the specified characters , And according to the user's choice , Decide whether to delete
Ideas :
- Start with the root of a tree , Traverse the whole tree
- Put the name of each node matching Search for conditions
- If you qualify , Just keep it File object
- After traversal , Get a group of qualified File object
- Ask the user once , The next step for these objects is to deal with objects
package com.djl.io;
/** * Scan the specified directory , And find all ordinary files whose names contain the specified characters ( Does not contain a directory ), And then ask the user whether to * Delete the file */
import java.io.File;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
System.out.println(" Please enter the directory to scan :");
String dir = sc.nextLine();
File file = new File(dir);
if(!file.isDirectory()){
System.out.println(" The path to be scanned is not a directory or does not exist ");
return;
}
System.out.println(" Please enter the characters to be included in the file name :");
String fileName = sc.nextLine();
Deque<File> list = new ArrayDeque<>();
// This method will store the qualified file path to list in
findFile(file,fileName,list);
while (!list.isEmpty()){
File file1 = list.poll();
System.out.println(" Whether or not to delete " + file1.getAbsolutePath() + " y/n");
String pd = sc.nextLine();
if(pd.toLowerCase().equals("y")){
file1.delete();
System.out.println(" Delete successful ");
}
}
}
private static void findFile(File file, String fileName, Deque<File> list) throws Exception{
File[] files = file.listFiles();
if(files == null || files.length == 0){
return;
}
for(File f : files){
if(f.isDirectory()){
findFile(f,fileName,list);
}else {
String name = f.getName();
if(name.contains(fileName)){
list.offer(f);
}
}
}
}
}
2 Copy of a file
Given two paths : Source file path ( There must be )、 The target path ( Must not exist && Directory exists )
Source file It must be an ordinary file , Not a directory file
Ideas :
- Because it's just copying , So we don't consider the content of the document at all
- So what we have to do is : Traverse ( Read data from the source file , Write target file ) Until all the data are written
package com.djl.io;
import java.io.*;
// Copy of documents
public class Test2 {
public static void main(String[] args) throws Exception{
File oldFile = new File("D:/ resume /Java Resume of Development Engineer .docx");
File newFile = new File("D:/ resume /2/ resume .docx");
// Count the time required for replication
long sta = System.currentTimeMillis();
// Prepared bucket
byte[] bur = new byte[1024];
int count = 0;
try (InputStream is = new FileInputStream(oldFile)){
try(OutputStream os = new FileOutputStream(newFile)){
while (true){
int n = is.read(bur);
count += n;
if(n == -1){
break;
}
os.write(bur);
}
os.flush();
}
}
long end = System.currentTimeMillis();
long ms = end-sta;
double s = ms/1000.0;
System.out.println(" Copy time is :"+s+"ms");
}
}
3 Copy of a directory
Given two paths : Source file path ( There must be && Is a directory )、 The target path ( Must not exist && The parent directory does not exist )
Ideas :
if( Catalog ) : Continue to recursive + Create a directory relative to the target
if( file ): The relative position of the target , Copy files
package com.djl.io;
// Copy of directory
import java.io.*;
public class Test2_copyDir {
static File oldFile = new File("D:/ resume ");
static File newFile = new File("D:/ resume /2");
public static void main(String[] args) throws Exception{
traversal(oldFile);
}
private static void traversal(File oldFile) throws Exception{
File[] oldFiles = oldFile.listFiles();
if(oldFiles == null){
System.out.println(" The directory is empty ");
return;
}
for(File file : oldFiles){
String oldFilePath = oldFile.getCanonicalPath();
String filePath = file.getCanonicalPath();
String newFilePath = newFile.getCanonicalPath();
String rever = filePath.substring(oldFilePath.length());
newFilePath = newFilePath + rever;
File oneNewFile = new File(newFilePath);
if(file.isDirectory()){
oneNewFile.mkdir();
traversal(file);
}else if(file.isFile()){
copyFile(file,oneNewFile);
}
}
}
private static void copyFile(File file, File oneNewFile) throws Exception{
try(InputStream is = new FileInputStream(file)){
try(OutputStream os = new FileOutputStream(oneNewFile)){
while (true){
byte[] bur = new byte[1024];
int n = is.read(bur);
if(n == -1){
break;
}
os.write(bur);
}
os.flush();
}
}
}
}
If it helps you , Please give me a compliment .
边栏推荐
- Tools to improve work efficiency: the idea of SQL batch generation tools
- Extracting profile data from profile measurement
- Arduino六足机器人
- [designmode] Decorator Pattern
- Atcoder beginer contest 254 [VP record]
- Spark DF增加一列
- Browser reflow and redraw
- 《编程之美》读书笔记
- Go learning --- structure to map[string]interface{}
- 【线上小工具】开发过程中会用到的线上小工具合集
猜你喜欢
Start from the bottom structure and learn the introduction of fpga---fifo IP core and its key parameters
State mode design procedure: Heroes in the game can rest, defend, attack normally and attack skills according to different physical strength values.
Key structure of ffmpeg -- AVCodecContext
[binary search tree] add, delete, modify and query function code implementation
Knowledge about the memory size occupied by the structure
Browser reflow and redraw
Leetcode:20220213 week race (less bugs, top 10% 555)
N1 # if you work on a metauniverse product [metauniverse · interdisciplinary] Season 2 S2
Huawei equipment configuration ospf-bgp linkage
Tools to improve work efficiency: the idea of SQL batch generation tools
随机推荐
Data analysis thinking analysis methods and business knowledge - analysis methods (III)
Reading notes of the beauty of programming
【线上小工具】开发过程中会用到的线上小工具合集
Priority queue (heap)
LeetCode 1598. Folder operation log collector
【EI会议分享】2022年第三届智能制造与自动化前沿国际会议(CFIMA 2022)
NLP basic task word segmentation third party Library: ICTCLAS [the third party library with the highest accuracy of Chinese word segmentation] [Chinese Academy of Sciences] [charge]
MDK debug时设置数据实时更新
[Online gadgets] a collection of online gadgets that will be used in the development process
Notepad++ regular expression replacement string
notepad++正則錶達式替換字符串
Uniapp development, packaged as H5 and deployed to the server
多线程与高并发(8)—— 从CountDownLatch总结AQS共享锁(三周年打卡)
QT -- thread
Codeforces Round #804 (Div. 2)【比赛记录】
Intranet Security Learning (V) -- domain horizontal: SPN & RDP & Cobalt strike
LeetCode 1189. Maximum number of "balloons"
Anconda download + add Tsinghua +tensorflow installation +no module named 'tensorflow' +kernelrestart: restart failed, kernel restart failed
FFmpeg学习——核心模块
How to solve the problems caused by the import process of ecology9.0