ጃቫ ፋይሎችን ለማንበብ በርካታ ዘዴዎችን ይሰጣል ፡፡ እያንዳንዳቸው እነዚህ ዘዴዎች በተለያዩ ሁኔታዎች ውስጥ የተለያዩ የፋይሎችን አይነቶችን ለማንበብ ተገቢ ናቸው ፡፡ አንዳንዶቹ ረዣዥም ፋይሎችን ለማንበብ የተሻሉ ናቸው ፣ ሌሎቹ ደግሞ አጠር ያሉን ለማንበብ ፣ ወዘተ.
በዚህ መማሪያ ውስጥ ፋይሎችን ለማንበብ የሚከተሉትን የጃቫ ትምህርቶችን እንጠቀማለን
በትምህርቱ በሙሉ በ src
ውስጥ የተከማቸ ፋይል እየተጠቀምን ነው ወደ ፋይሉ የሚወስደው መንገድ src/file.txt
.
ከመቀጠልዎ በፊት በዚህ ፋይል ውስጥ በርካታ የጽሑፍ መስመሮችን ያከማቹ።
ማስታወሻ:እነዚህን አተገባበር በሚጠቀሙበት ጊዜ ከተሻለው የኮድ አሠራር ጋር ተጣብቀው ሲኖሩ ስህተቶቹን በትክክል መያዝ አለብዎት ፡፡የ BufferedReader
ክፍል የቁምፊ-ግቤት ዥረት ያነባል። የንባብ ሂደቱን የበለጠ ቀልጣፋ ለማድረግ ነባሪው 8 ኪባ መጠን ባለው ቋት ውስጥ ቁምፊዎችን ያስታጥቃል ፡፡ የፋይል መስመርን በመስመር ለማንበብ ከፈለጉ ፣ BufferedReader ን መጠቀም ጥሩ ምርጫ ነው።
BufferedReader
ትልልቅ ፋይሎችን በማንበብ ውጤታማ ነው ፡፡
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()
የፋይሉ መጨረሻ ላይ ሲደርስ ዘዴው ባዶውን ይመልሳል።
BufferedReader
ን መጠቀም እንችላለን የዩቲኤፍ -8 ኮድ የተደረገ ፋይልን ለማንበብ ክፍል ፡፡
በዚህ ጊዜ አንድ InputStreamReader
እናልፋለን አንድ BufferedReader
ሲፈጥሩ ነገር ለምሳሌ ፡፡
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);
}
} }
ጃቫ Files
በጃቫ NIO ውስጥ በጃቫ 7 ውስጥ የተጀመረው ክፍል በፋይሎች ላይ የሚሰሩ የማይንቀሳቀሱ ዘዴዎችን ሙሉ በሙሉ ያካተተ ነው ፡፡
በመጠቀም Files
ክፍል ፣ የፋይሉን ሙሉ ይዘት በድርድር ውስጥ ማንበብ ይችላሉ። ይህ ትናንሽ ፋይሎችን ለማንበብ ጥሩ ምርጫ ያደርገዋል።
በሁለቱም በእነዚህ ሁኔታዎች ውስጥ የፋይሎችን ክፍል እንዴት እንደምንጠቀምባቸው እንመልከት ፡፡
የ readAllLines()
የ Files
ዘዴ ክፍል የፋይሉን አጠቃላይ ይዘት እንዲያነብ ይፈቅድለታል እናም እያንዳንዱን መስመር እንደ አንድ ረድፍ በአንድ ረድፍ ውስጥ ያከማቻል ፡፡
የ | _ _ + _ | መጠቀም ይችላሉ ከ Path
ጀምሮ ወደ ፋይሉ የሚወስደውን መንገድ ለማግኘት ክፍል ክፍል Files
ይቀበላል የፋይሉ ነገር
Path
መጠቀም ይችላሉ 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()
ከ byte[] bytes = Files.readAllBytes(path);
ጋር አንድ ትልቅ ፋይል ለማንበብ ከፈለጉ ክፍልን መጠቀም ይችላሉ Files
newBufferedReader()
ምሳሌን ለማግኘት ዘዴ አንድ BufferedReader
በመጠቀም የፋይል መስመርን በመስመር ላይ ያንብቡ እና ያንብቡ ፡፡
BufferedReader
ጃቫ 8 ሙሉውን ፋይል ወደ 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();
} }
Stream
የ 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
ክፍል በነጭ ቦታዎች የተከፋፈሉ የቁጥር ቁጥሮች ወይም በኮማ የተለዩትን የቃጫዎች ዝርዝር ለማንበብ ተስማሚ ነው።
ነባሪው የ Scanner
ክፍል የነጭ ክልል ነው። ግን ወሰኑን ወደሌላ ገጸ-ባህሪ ወይም መደበኛ አገላለፅ ማቀናበር ይችላሉ ፡፡ ይዘትን ወደ ተለያዩ ዓይነቶች ለመቀየር እንደ Scanner
, next()
, nextInt()
እና nextLine()
ያሉ የተለያዩ ቀጣይ ዘዴዎችም አሉት ፡፡
nextByte()
ከላይ በተጠቀሰው ምሳሌ ውስጥ ወሰን ወደ የነጭ ክልል እናዘጋጃለን እና 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();
} }
የ | _ _ + _ | መጠቀም ይችላሉ ሙሉውን ፋይል በአንድ ጊዜ ዑደት ሳያካሂዱ ለማንበብ ክፍል። ማለፍ አለብዎት next()
ለዚህ እንደ ወሰን ፡፡
Scanner
ማስታወሻ:የስካነር ክፍሉ አልተመሳሰለም እና ስለሆነም በክር-ደህና አይደለም።በዚህ ማጠናከሪያ ትምህርት ውስጥ እንዳዩት ጃቫ የጽሑፍ ፋይሎችን ለማንበብ በእጅዎ ካለው ተግባር ባህሪ አንጻር የሚመርጧቸውን ብዙ ዘዴዎችን ይሰጣል ፡፡ መጠቀም ይችላሉ “\Z”
ትላልቅ ፋይሎችን በመስመር ለማንበብ ፡፡
ይዘቱን በተወሰነ ወዳጅ የሚለይ ፋይልን ለማንበብ ከፈለጉ scanner.useDelimiter('\Z'); System.out.println(scanner.next()); scanner.close();
ይጠቀሙ ክፍል
እንዲሁም ጃቫ NIO BufferedReader
መጠቀም ይችላሉ ትናንሽ እና ትልልቅ ፋይሎችን ለማንበብ ክፍል ፡፡