


Notions de base de Java?: flux d'E/S et méthodes de fonctionnement des fichiers de classe File
May 12, 2023 pm 04:37 PM?I/O流原理及流的分類
I/O原理
I/O是Input和Output的縮寫,I/O技術(shù)是非常實(shí)用的技術(shù),用于處理數(shù)據(jù)傳輸(如:讀/寫文件,網(wǎng)絡(luò)通信)
Java程序中,對于數(shù)據(jù)的輸入/輸出操作是以流(stream)的方式進(jìn)行的
java.io包下提供了各種流(stream)類和接口,用以獲取不同種類的數(shù)據(jù),并通過方法輸入和輸出數(shù)據(jù)。
文件流:文件在程序中是以流的形式操作的
輸入流:數(shù)據(jù)從數(shù)據(jù)源(文件)到程序(內(nèi)存)的路徑
輸出流:數(shù)據(jù)從程序(內(nèi)存)到數(shù)據(jù)源(文件)的路徑
I/O流的分類
按操作數(shù)據(jù)單位分為:字節(jié)流(二進(jìn)制文件)、字符流(文本文件)
按數(shù)據(jù)的流向分為:輸入流、輸出流
按流的角色分為:節(jié)點(diǎn)流、處理流
抽象基類 | 字節(jié)流 | 字符流 |
---|---|---|
輸入流 | InputStream | Reader |
輸出流 | OutputStream | Writer |
??I/O的體系結(jié)構(gòu)
文件(File)
概念
什么是文件?
文件,對于我們并陌生,文件就是保存數(shù)據(jù)的地方,比如word文檔、txt文本、excel文件、圖片、視頻…等都是文件,操作系統(tǒng)中以文件為單位管理磁盤中的數(shù)據(jù)。從數(shù)據(jù)存儲(chǔ)角度來說,所有文件本質(zhì)上都是一樣的,都是由一個(gè)個(gè)字節(jié)組成的歸根到底都是0-1比特串。
文件夾(目錄)
多個(gè)文件如果不分類放在一起,用戶使用起來就非常不方便,因此,又引入了樹形目錄(也叫文件夾)的機(jī)制,可以把文件放在不同的文件夾中,文件夾中還可以嵌套文件夾,這就便于用戶對文件進(jìn)行管理和使用。
??常用操作(File類)
創(chuàng)建文件對象相關(guān)構(gòu)造器和方法
new File(String pathname);//根據(jù)路徑構(gòu)建一個(gè)File對象
new File(File parent,String child);//根據(jù)父目錄文件+子路徑構(gòu)建
new File(String parent,String child);//根據(jù)父目錄路徑+子路徑構(gòu)建
createNewFile();//創(chuàng)建新文件
在E盤下,用以上方式創(chuàng)建文件test01.txt\test02.txt\test03.txt
import java.io.File; import java.io.IOException; public class FileCreate { public static void main(String[] args) throws IOException { //方式1 String pathname = "e:\\test01.txt"; File file1 = new File(pathname); file1.createNewFile(); //方式2 File parentfile = new File("e:\\"); String child2 = "test02.txt"; File file2 = new File(parentfile, child2); file2.createNewFile(); //方式3 String parent = "e:\\"; String child3 = "test03.txt"; File file3 = new File(parent, child3); file3.createNewFile(); } }
獲取文件的相關(guān)信息
get.getName();//獲取文件名字
canRead();//文件是否可讀
canWrite();//文件是否可寫
getAbsoultePath();//獲取文件的絕對路徑
getPath();//相對路徑
getParent();//獲取文件父級目錄
lenth();//文件大?。ㄗ止?jié))
exists();//判斷文件是否存在
isFile();//判斷是不是一個(gè)文件
isDirectory();//判斷是不是一個(gè)目錄
import java.io.File; public class FileInfomation { public static void main(String[] args) { //創(chuàng)建文件對象 File file = new File("e:\\test01.txt"); System.out.println("文件名字:" + file.getName()); System.out.println("文件是否可讀:" + file.canRead()); System.out.println("文件是否可寫:" + file.canWrite()); System.out.println("文件絕對路徑:" + file.getAbsolutePath()); System.out.println("文件大小(字節(jié)):" + file.length()); System.out.println("文件是否存在:" + file.exists()); System.out.println("是不是一個(gè)文件:" + file.isFile()); System.out.println("是不是一個(gè)目錄:" + file.isDirectory()); } }
文件比較
File f1=new File("D:\\test1.txt"); File f2=new File("D:\\test2.txt"); f1==f2;//比較的是兩個(gè)對象的地址 f1.equals(f2);//比較兩個(gè)對象對應(yīng)的文件的路徑
目錄操作和文件刪除
mkdir();//創(chuàng)建單層目錄
mkdirs();//創(chuàng)建多層目錄
delete();//刪除目錄(這層目錄必須為空,沒有內(nèi)容)
查看文件目錄
list();//返回一個(gè)字符串?dāng)?shù)組,命名由此抽象路徑名表示的目錄中的文件和目錄。
listFiles();//返回一個(gè)抽象路徑名數(shù)組,表示由該抽象路徑名表示的目錄中的文件。
案列:遍歷一個(gè)目錄下的所有文件打印輸出
public class PrintFile { public static void main(String[] args) { //創(chuàng)建文件對象 File file = new File("e:\\Test"); String[] list = file.list();//文件夾下目錄/文件對應(yīng)的名字的數(shù)組 for (String s : list) { System.out.println(s); } File[] files = file.listFiles(); for (File f : files) { System.out.println(f.getName() + "," + f.getAbsolutePath()); } } }
遍歷目錄
1.給定一個(gè)文件對象file
2.listFiles()獲取該文件下的所有文件對象數(shù)組
3.遍歷File對象數(shù)組,如果是目錄,遞歸調(diào)用該方法獲取該目錄下的所有文件對象;如果是文件,打印輸出路徑+姓名
import java.io.File; public class PrintFile { public static void main(String[] args) { File file = new File("E:\\Code"); getAllFile(file); } public static void getAllFile(File file) { //獲取給定目錄下的所有File對象數(shù)組 File[] files = file.listFiles(); //開始遍歷 if (files != null) { for (File f : files) { if (f.isDirectory()) {//判斷是否為目錄,如果是,調(diào)用遞歸 getAllFile(f); } else {//不是,就打印路徑+文件名 System.out.println(f.getAbsoluteFile() + "下的:" + f.getName()); } } } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Pour gérer correctement les transactions JDBC, vous devez d'abord désactiver le mode de validation automatique, puis effectuer plusieurs opérations, et enfin vous engager ou randonner en fonction des résultats; 1. Appelez Conn.SetAutoCommit (false) pour démarrer la transaction; 2. Exécuter plusieurs opérations SQL, telles que l'insertion et la mise à jour; 3. Appelez Conn.Commit () Si toutes les opérations sont réussies, et appelez Conn.Rollback () Si une exception se produit pour garantir la cohérence des données; Dans le même temps, les ressources TRY-With doivent être utilisées pour gérer les ressources, gérer correctement les exceptions et cl?turer les connexions pour éviter la fuite de connexion; De plus, il est recommandé d'utiliser des pools de connexion et de définir des points de sauvegarde pour réaliser un retour en arrière partiel, et de maintenir les transactions aussi courtes que possible pour améliorer les performances.

Utilisez des classes dans le package Java.Time pour remplacer les anciennes classes de date et de calendrier; 2. Obtenez la date et l'heure actuelles via LocalDate, LocalDateTime et Localtime; 3. Créez une date et une heure spécifiques en utilisant la méthode OF (); 4. Utilisez la méthode plus / moins pour augmenter et diminuer le temps; 5. Utilisez ZonedDateTime et ZoneID pour traiter le fuseau horaire; 6. Format et cha?nes de date d'analyse via DateTimeFormatter; 7. Utilisez instantanément pour être compatible avec les anciens types de dates si nécessaire; Le traitement des dattes dans le Java moderne devrait donner la priorité à l'utilisation de Java.timeapi, qui fournit clairement, immuable et linéaire

Pré-formancetartuptimemoryusage, quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusofperforming lightbetterine scénarios.

HTTP Log Middleware dans GO peut enregistrer les méthodes de demande, les chemins de requête, la propriété intellectuelle du client et le temps qui prend du temps. 1. Utilisez http.handlerfunc pour envelopper le processeur, 2. Enregistrez l'heure de début et l'heure de fin avant et après l'appel Suivant.Servehttp, 3. Obtenez le vrai client IP via R.RemoteAddr et X-Forwared-For Headers, 4. Utilisez le log.printf aux journaux de demande de sortie, 5. L'exemple de code complet a été vérifié pour s'exécuter et convient au démarrage d'un projet petit et moyen. Les suggestions d'extension incluent la capture des codes d'état, la prise en charge des journaux JSON et le suivi des ID de demande.

La collecte des ordures de Java (GC) est un mécanisme qui gère automatiquement la mémoire, ce qui réduit le risque de fuite de mémoire en récupérant des objets inaccessibles. 1. GC juge l'accessibilité de l'objet de l'objet racine (tel que les variables de pile, les threads actifs, les champs statiques, etc.), et les objets inaccessibles sont marqués comme des ordures. 2. Sur la base de l'algorithme de compensation de marque, marquez tous les objets accessibles et effacez des objets non marqués. 3. Adopter une stratégie de collecte générationnelle: la nouvelle génération (Eden, S0, S1) exécute fréquemment MinorGC; Les personnes agées fonctionnent moins, mais prend plus de temps pour effectuer MajorGC; Metaspace Stores Metadata de classe. 4. JVM fournit une variété de périphériques GC: SerialGC convient aux petites applications; Le parallelGC améliore le débit; CMS réduit

Le choix du bon type HTMLinput peut améliorer la précision des données, améliorer l'expérience utilisateur et améliorer la convivialité. 1. Sélectionnez les types d'entrée correspondants en fonction du type de données, tels que le texte, le courrier électronique, le tel, le numéro et la date, qui peuvent vérifier automatiquement la somme de la somme et l'adaptation au clavier; 2. Utilisez HTML5 pour ajouter de nouveaux types tels que l'URL, la couleur, la plage et la recherche, qui peuvent fournir une méthode d'interaction plus intuitive; 3. Utilisez l'espace réservé et les attributs requis pour améliorer l'efficacité et la précision du remplissage des formulaires, mais il convient de noter que l'espace réservé ne peut pas remplacer l'étiquette.

GradleisthebetterChoiceFormostNewProjectsDuetOtsSuperiorflexibility, Performance et ModerNtoolingSupport.1.gradle’sgroovy / kotlindslismoreConcis

Le report est utilisé pour effectuer des opérations spécifiées avant le retour de la fonction, telles que les ressources de nettoyage; Les paramètres sont évalués immédiatement lorsqu'ils sont reportés et les fonctions sont exécutées dans l'ordre de la dernière entrée (LIFO); 1. Plusieurs éleveurs sont exécutés dans l'ordre inverse des déclarations; 2. Communément utilisé pour le nettoyage sécurisé tel que la fermeture des fichiers; 3. La valeur de retour nommée peut être modifiée; 4. Il sera exécuté même si la panique se produit, adaptée à la récupération; 5. éviter l'abus de report dans les boucles pour éviter la fuite des ressources; Une utilisation correcte peut améliorer la sécurité et la lisibilité du code.
