Java faylları oxumaq üçün bir neçə metod təqdim edir. Bu metodların hər biri fərqli vəziyyətlərdə müxtəlif növ faylları oxumaq üçün uyğundur. Bəziləri daha uzun faylları oxumaq üçün daha yaxşıdır, bəziləri daha qısa faylları oxumaq üçün daha yaxşıdır və s.
Bu təlimatda, faylları oxumaq üçün aşağıdakı Java dərslərindən istifadə edəcəyik
Dərs boyunca, src
-də saxlanılan bir fayldan istifadə edirik faylın yolunun olduğu qovluq src/file.txt
.
Davam etmədən əvvəl bir neçə sətir mətni bu faylda saxlayın.
Qeyd:Ən yaxşı kodlaşdırma təcrübələrinə sadiq qalmaq üçün bu tətbiqetmələrdən istifadə edərkən səhvləri düzgün idarə etməlisiniz.BufferedReader
sinif bir xarakter giriş axını oxuyur. Oxu prosesini daha səmərəli etmək üçün 8 KB-lıq ölçülü bir tamponda simvolları buferləşdirir. Bir fayl sətir-sətir oxumaq istəyirsinizsə, BufferedReader istifadə etmək yaxşı seçimdir.
BufferedReader
böyük faylları oxumaqda səmərəlidir.
import java.io.*; public class FileReaderWithBufferedReader {
public static void main(String[] args) throws IOException{We
String file = 'src/file.txt';
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String curLine;
while ((curLine = bufferedReader.readLine()) != null){
//process the line as required
System.out.println(curLine);
}
bufferedReader.close();
} }
readline()
metod faylın sonuna çatdıqda sıfır qaytarır.
BufferedReader
İstifadə edə bilərik UTF-8 kodlu bir sənəd oxumaq üçün sinif.
Bu dəfə bir InputStreamReader
keçirik BufferedReader
yaratarkən obyekt misal.
import java.io.*; public class EncodedFileReaderWithBufferedReader {
public static void main(String[] args) throws IOException {
String file = 'src/fileUtf8.txt';
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), 'UTF-8'));
String curLine;
while ((curLine = bufferedReader.readLine()) != null){
//process the line as you require
System.out.println(curLine);
}
} }
Java Files
Java NIO-da Java 7-də tətbiq olunan sinif, tamamilə fayllarda işləyən statik metodlardan ibarətdir.
Files
İstifadə sinif, bir faylın tam məzmununu bir sıra halında oxuya bilərsiniz. Bu, daha kiçik faylları oxumaq üçün yaxşı bir seçimdir.
Gəlin hər iki ssenaridə Files sinifindən necə istifadə edə biləcəyimizi görək.
readAllLines()
Files
üsulu sinif, faylın bütün məzmununun oxunmasına imkan verir və hər sətri bir sıra olaraq strings kimi saxlayır.
Path
İstifadə edə bilərsiniz Files
-dən bəri faylın yolunu almaq üçün sinif sinif Path
qəbul edir sənədin obyekti.
import java.io.IOException; import java.nio.file.*; import java.util.*; public class SmallFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
List lines = Files.readAllLines(path);
} }
readAllBytes()
İstifadə edə bilərsiniz faylda saxlanılan məlumatları simli sıra yerinə bir bayt massivinə qaytarmaq.
byte[] bytes = Files.readAllBytes(path);
Files
İlə böyük bir sənəd oxumaq istəyirsinizsə sinif, newBufferedReader()
istifadə edə bilərsiniz BufferedReader
nümunəsini əldə etmək üçün metod sinif və bir BufferedReader
istifadə edərək satır satır oxuyun.
import java.io.*; import java.nio.file.*; public class LargeFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
BufferedReader bufferedReader = Files.newBufferedReader(path);
String curLine;
while ((curLine = bufferedReader.readLine()) != null){
System.out.println(curLine);
}
bufferedReader.close();
} }
Java 8, Files sinfinə yeni bir üsul təqdim etdi ki, bütün dosyayı bir Stream
simli.
import java.io.IOException; import java.nio.file.*; import java.util.stream.Stream; public class FileReaderWithFilesLines {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
Stream lines = Files.lines(path);
lines.forEach(s -> System.out.println(s));
lines.close();
} }
Scanner
sinif verilmiş ayırıcıdan istifadə edərək bir sənədin məzmununu hissələrə ayırır və hissə-hissə oxuyur. Bu yanaşma, ayırıcı ilə ayrılmış məzmunu oxumaq üçün ən uyğun gəlir.
Məsələn, Scanner
sinif, boşluqlarla ayrılmış tam ədədlərin siyahısını və ya vergüllə ayrılmış simlərin siyahısını oxumaq üçün idealdır.
Varsayılan ayırıcı Scanner
sinif boşluqdur. Ancaq ayırıcıyı başqa bir xarakterə və ya normal bir ifadəyə qura bilərsiniz. Məzmunu müxtəlif növlərə çevirmək üçün next()
, nextInt()
, nextLine()
, və nextByte()
kimi müxtəlif növbəti metodlara da malikdir.
import java.io.IOException; import java.util.Scanner; import java.io.File; public class FileReaderWithScanner {
public static void main(String[] args) throws IOException{
String file = 'src/file.txt';
Scanner scanner = new Scanner(new File(file));
scanner.useDelimiter(' ');
while(scanner.hasNext()){
String next = scanner.next();
System.out.println(next);
}
scanner.close();
} }
Yuxarıdakı nümunədə ayırıcıyı boşluq olaraq təyin etdik və next()
istifadə etdik boşluqla ayrılmış məzmunun növbəti hissəsini oxumaq üçün metod.
Scanner
İstifadə edə bilərsiniz sinfi bir dövrü işləmədən bütün faylı birdən oxumaq. “\Z”
Keçməlisən bunun üçün ayırıcı kimi.
scanner.useDelimiter('\Z'); System.out.println(scanner.next()); scanner.close();
Qeyd:Scanner sinfi sinxronlaşdırılmır və bu səbəbdən də təhlükəsizdir.Bu təlimatda gördüyünüz kimi, Java mətn sənədlərini oxumaq üçün əlinizdəki tapşırığın xüsusiyyətinə görə seçim edə biləcəyiniz bir çox metod təqdim edir. BufferedReader
İstifadə edə bilərsiniz böyük faylları sətir-sətir oxumaq.
Məzmunu ayırıcı ilə ayrılmış bir faylı oxumaq istəyirsinizsə, Scanner
istifadə edin sinif.
Ayrıca Java NIO Files
istifadə edə bilərsiniz həm kiçik, həm də böyük sənədləri oxumaq üçün sinif.