File
۔ آپ اس کے کام کے بارے میں یہاں پڑھ سکتے ہیں ۔ لیکن جاوا 7 میں، زبان کے تخلیق کاروں نے فیصلہ کیا کہ وہ فائلوں اور ڈائریکٹریوں کے ساتھ کیسے کام کرتے ہیں۔ یہ اس حقیقت کی وجہ سے تھا کہ کلاس کے File
بہت سے نقصانات تھے۔ مثال کے طور پر، اس میں کوئی ایسا طریقہ نہیں تھا copy()
جو آپ کو فائل کو ایک جگہ سے دوسری جگہ کاپی کرنے کی اجازت دے (ایک بظاہر واضح طور پر درکار خصوصیت)۔ اس کے علاوہ، کلاس میں File
بہت سارے طریقے تھے جو boolean
-values واپس آئے۔ اگر کوئی خرابی واقع ہوتی ہے، تو ایسا طریقہ استثنیٰ دینے کے بجائے غلط لوٹاتا ہے، جس سے غلطیوں کی تشخیص اور ان کی وجوہات کا تعین کرنا بہت مشکل ہو جاتا ہے۔ ایک کلاس کے بجائے، File
زیادہ سے زیادہ 3 کلاسیں نمودار ہوئیں: Paths
, Path
اور Files
. ٹھیک ہے، واضح طور پر، Path
یہ ایک انٹرفیس ہے، کلاس نہیں ہے. آئیے معلوم کریں کہ وہ ایک دوسرے سے کیسے مختلف ہیں اور ان میں سے ہر ایک کی ضرورت کیوں ہے۔ آئیے سب سے آسان چیز کے ساتھ شروع کرتے ہیں Paths
۔
راستے
Paths
ایک واحد جامد طریقہ کے ساتھ ایک بہت ہی آسان کلاس ہے get()
۔ اسے مکمل طور پر پاس شدہ سٹرنگ یا URI سے قسم کی چیز حاصل کرنے کے لیے بنایا گیا تھا Path
۔ اس میں کوئی دوسری فعالیت نہیں ہے۔ یہاں ان کے کام کی ایک مثال ہے:
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) {
Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt");
}
}
سب سے مشکل کلاس نہیں ہے، ٹھیک ہے؟ :) ٹھیک ہے، چونکہ ہمیں ایک قسم کی چیز ملی ہے Path
، آئیے معلوم کریں کہ یہ کیا ہے Path
اور اس کی ضرورت کیوں ہے :)
راستہ
Path
، بڑے پیمانے پر، کا ایک دوبارہ ڈیزائن کردہ اینالاگ ہے File
۔ اس کے ساتھ کام کرنا بہت آسان ہے File
۔ سب سے پہلے ، بہت سے افادیت (جامد) طریقوں کو اس سے ہٹا دیا گیا اور کلاس میں منتقل کر دیا گیا Files
۔ دوم ، Path
طریقوں کی واپسی کی اقدار کا حکم دیا گیا تھا۔ کلاس میں، File
طریقوں نے یہ واپس کر دیا String
، وہ boolean
، وہ File
- یہ معلوم کرنا آسان نہیں تھا۔ مثال کے طور پر، ایک ایسا طریقہ تھا getParent()
جس نے موجودہ فائل کے لیے بنیادی راستہ بطور سٹرنگ واپس کیا۔ لیکن ایک ہی وقت میں ایک طریقہ تھا getParentFile()
جس نے وہی چیز واپس کردی، لیکن ایک چیز کی شکل میں File
! یہ واضح طور پر بے کار ہے۔ لہذا، انٹرفیس میں، فائلوں کے ساتھ کام کرنے کا Path
طریقہ getParent()
اور دیگر طریقے آسانی سے کسی چیز کو واپس کرتے ہیں Path
۔ اختیارات کا کوئی ڈھیر نہیں - سب کچھ آسان اور آسان ہے۔ اس کے کیا مفید طریقے ہیں Path
؟ یہاں ان میں سے کچھ اور ان کے کام کی مثالیں ہیں:
-
getFileName()
- راستے سے فائل کا نام واپس کرتا ہے۔ -
getParent()
- موجودہ راستے کے سلسلے میں "والدین" ڈائرکٹری کو لوٹاتا ہے (یعنی وہ ڈائرکٹری جو ڈائریکٹری کے درخت میں زیادہ ہے)؛ -
getRoot()
- "روٹ" ڈائرکٹری واپس کرتا ہے۔ یعنی، ڈائرکٹری کے درخت کے اوپری حصے میں ہے۔ -
startsWith()
,endsWith()
— چیک کریں کہ آیا راستہ گزرے ہوئے راستے سے شروع ہوتا ہے/ختم ہوتا ہے:import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt"); Path fileName = testFilePath.getFileName(); System.out.println(fileName); Path parent = testFilePath.getParent(); System.out.println(parent); Path root = testFilePath.getRoot(); System.out.println(root); boolean endWithTxt = testFilePath.endsWith("Desktop\\testFile.txt"); System.out.println(endWithTxt); boolean startsWithLalala = testFilePath.startsWith("lalalala"); System.out.println(startsWithLalala); } }
کنسول آؤٹ پٹ:
testFile.txt
C:\Users\Username\Desktop
C:\
true
falseطریقہ کار کیسے کام کرتا ہے اس پر توجہ دیں
endsWith()
۔ یہ چیک کرتا ہے کہ آیا موجودہ راستہ گزرے ہوئے راستے کے ساتھ ختم ہوتا ہے ۔ یہ راستے پر ہے ، کرداروں کے سیٹ پر نہیں ۔ان دو کالوں کے نتائج کا موازنہ کریں:
import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt"); System.out.println(testFilePath.endsWith("estFile.txt")); System.out.println(testFilePath.endsWith("Desktop\\testFile.txt")); } }
کنسول آؤٹ پٹ:
جھوٹ
سچآپ کو طریقہ تک مکمل راستہ پاس کرنے کی ضرورت ہے
endsWith()
، نہ کہ صرف حروف کا ایک مجموعہ: بصورت دیگر نتیجہ ہمیشہ غلط ہوگا ، یہاں تک کہ اگر موجودہ راستہ حقیقت میں حروف کی اس ترتیب کے ساتھ ختم ہوتا ہے (جیسا کہ "estFile.txt" کے معاملے میں "اوپر کی مثال میں)۔اس کے علاوہ، طریقوں کا ایک گروپ ہے جو مطلق (مکمل) اور متعلقہ راستوں کے ساتھ کام کرنے کو آسان بناتا ہے
Path
۔
-
boolean isAbsolute()
- اگر موجودہ راستہ مطلق ہے تو صحیح لوٹتا ہے:import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt"); System.out.println(testFilePath.isAbsolute()); } }
کنسول آؤٹ پٹ:
سچ ہے
-
Path normalize()
- موجودہ راستے کو "معمول" بناتا ہے، اس سے غیر ضروری عناصر کو ہٹاتا ہے۔ آپ جانتے ہوں گے کہ مقبول آپریٹنگ سسٹم اکثر راستوں کی نشاندہی کرتے وقت "." حروف استعمال کرتے ہیں۔ ("موجودہ ڈائریکٹری") اور ".." (والدین ڈائریکٹری)۔ مثال کے طور پر: " ./Pictures/dog.jpg " کا مطلب ہے کہ ہم جس ڈائرکٹری میں ہیں، وہاں ایک Pictures فولڈر ہے، اور اس میں ایک فائل "dog.jpg" ہے۔تو یہ یہاں ہے۔ اگر آپ کے پروگرام میں کوئی راستہ ہے جو "" استعمال کرتا ہے۔ یا ".."، طریقہ
normalize()
انہیں ہٹا دے گا اور ایک راستہ حاصل کرے گا جس میں ان پر مشتمل نہیں ہوگا:import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path path5 = Paths.get("C:\\Users\\Java\\.\\examples"); System.out.println(path5.normalize()); Path path6 = Paths.get("C:\\Users\\Java\\..\\examples"); System.out.println(path6.normalize()); } }
کنسول آؤٹ پٹ:
C:\Users\Java\مثالیں
C:\Users\examples -
Path relativize()
- موجودہ اور گزرے ہوئے راستے کے درمیان رشتہ دار راستے کا حساب لگاتا ہے۔مثال کے طور پر:
import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path testFilePath1 = Paths.get("C:\\Users\\Users\\Users\\Users"); Path testFilePath2 = Paths.get("C:\\Users\\Users\\Users\\Users\\Username\\Desktop\\testFile.txt"); System.out.println(testFilePath1.relativize(testFilePath2)); } }
کنسول آؤٹ پٹ:
Username\Desktop\testFile.txt
Path
کافی بڑی ہے۔ آپ ان سب کو اوریکل دستاویزات میں تلاش کر سکتے ہیں ۔ ہم جائزہ لینے کے لیے آگے بڑھیں گے Files
۔
فائلوں
Files
- یہ ایک یوٹیلیٹی کلاس ہے جہاں کلاس سے جامد طریقے منتقل کیے گئے تھے File
۔ Files
- یہ تقریباً یکساں ہے Arrays
یا Collections
، صرف یہ فائلوں کے ساتھ کام کرتا ہے، نہ کہ صفوں اور مجموعوں کے ساتھ :) یہ فائلوں اور ڈائریکٹریوں کے انتظام پر مرکوز ہے۔ جامد طریقوں کا استعمال کرتے ہوئے Files
، ہم فائلوں اور ڈائریکٹریوں کو تخلیق، حذف اور منتقل کر سکتے ہیں۔ ان کارروائیوں کے لیے طریقے استعمال کیے جاتے ہیں createFile()
(ڈائریکٹریوں کے لیے - createDirectory()
)، move()
اور delete()
. انہیں استعمال کرنے کا طریقہ یہاں ہے:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
public class Main {
public static void main(String[] args) throws IOException {
//file creation
Path testFile1 = Files.createFile(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt"));
System.out.println("Was the file created successfully?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));
// create directory
Path testDirectory = Files.createDirectory(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory"));
System.out.println("Was the directory successfully created?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory")));
//move file from desktop to testDirectory. You need to move with the name of the file in the folder!
testFile1 = Files.move(testFile1, Paths.get("C:\\Users\\Username\\Desktop\\testDirectory\\testFile111.txt"), REPLACE_EXISTING);
System.out.println("Is our file left on the desktop?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));
System.out.println("Has our file been moved to testDirectory?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory\\testFile111.txt")));
//remove file
Files.delete(testFile1);
System.out.println("Does the file still exist?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory\\testFile111.txt")));
}
}
یہاں ہم سب سے پہلے ڈیسک ٹاپ پر ایک فائل (method Files.createFile()
) بناتے ہیں، پھر وہاں فولڈر بناتے ہیں (method Files.createDirectory()
)۔ اس کے بعد، ہم فائل (method Files.move()
) کو ڈیسک ٹاپ سے اس نئے فولڈر میں منتقل کرتے ہیں، اور آخر میں ہم فائل (method Files.delete()
) کو حذف کر دیتے ہیں۔ کنسول آؤٹ پٹ: کیا فائل کامیابی کے ساتھ بنائی گئی تھی؟ true کیا ڈائریکٹری کامیابی کے ساتھ بنائی گئی تھی؟ true کیا ہماری فائل اب بھی ڈیسک ٹاپ پر ہے؟ غلط کیا ہماری فائل کو testDirectory میں منتقل کر دیا گیا ہے؟ true کیا فائل اب بھی موجود ہے؟ جھوٹا توجہ فرمایے:انٹرفیس کے طریقوں کی طرح Path
، بہت سے طریقے Files
کسی چیز کو واپس کرتے ہیںPath
۔ زیادہ تر طبقاتی طریقے Files
بھی قبول کرتے ہیں Path
۔ یہاں ایک طریقہ آپ کا وفادار معاون بن جائے گا Paths.get()
- اسے فعال طور پر استعمال کریں۔ اس میں اور کیا دلچسپ ہے Files
؟ پرانے طبقے میں واقعی جس چیز کی کمی تھی File
وہ تھا copy()
! ہم نے لیکچر کے آغاز میں اس کے بارے میں بات کی تھی، اب اس سے ملنے کا وقت ہے!
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
public class Main {
public static void main(String[] args) throws IOException {
//file creation
Path testFile1 = Files.createFile(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt"));
System.out.println("Was the file created successfully?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));
// create directory
Path testDirectory2 = Files.createDirectory(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2"));
System.out.println("Was the directory successfully created?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2")));
//copy the file from the desktop to the directory testDirectory2.
testFile1 = Files.copy(testFile1, Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2\\testFile111.txt"), REPLACE_EXISTING);
System.out.println("Is our file left on the desktop?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));
System.out.println("Has our file been copied to testDirectory?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2\\testFile111.txt")));
}
}
کنسول آؤٹ پٹ: کیا فائل کامیابی کے ساتھ بنائی گئی تھی؟ true کیا ڈائریکٹری کامیابی کے ساتھ بنائی گئی تھی؟ true کیا ہماری فائل اب بھی ڈیسک ٹاپ پر ہے؟ true کیا ہماری فائل testDirectory میں کاپی کی گئی تھی؟ true اب آپ پروگرام کے مطابق فائلوں کو کاپی کر سکتے ہیں! :) لیکن کلاس Files
آپ کو نہ صرف فائلوں کا خود انتظام کرنے کی اجازت دیتی ہے بلکہ اس کے مواد کے ساتھ کام کرنے کی بھی اجازت دیتی ہے۔ فائل میں ڈیٹا لکھنے کے لیے، اس کا ایک طریقہ ہے write()
، اور پڑھنے کے لیے - زیادہ سے زیادہ 3:، read()
اور readAllBytes()
ہم readAllLines()
مؤخر الذکر پر تفصیل سے غور کریں گے۔ اس پر کیوں؟ کیونکہ اس کی واپسی کی ایک بہت ہی دلچسپ قسم ہے - List<String>
! یعنی، یہ ہمیں فائل میں لائنوں کی فہرست واپس کرتا ہے۔ بلاشبہ، یہ مواد کے ساتھ کام کرنا بہت آسان بناتا ہے، کیونکہ پوری فائل، لائن بہ لائن، مثال کے طور پر، کنسول میں ایک باقاعدہ لوپ میں آؤٹ پٹ ہو سکتی ہے for
:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Main {
public static void main(String[] args) throws IOException {
List<String> lines = Files.readAllLines(Paths.get("C:\\Users\\Username\\Desktop\\pushkin.txt"), UTF_8);
for (String s: lines) {
System.out.println(s);
}
}
}
کنسول آؤٹ پٹ: مجھے ایک حیرت انگیز لمحہ یاد ہے: آپ میرے سامنے نمودار ہوئے، ایک لمحاتی وژن کی طرح، خالص خوبصورتی کے ذہین کی طرح۔ بہت آرام سے! :) یہ فیچر جاوا 7 میں نمودار ہوا۔ جاوا 8 میں، Stream API نمودار ہوا ، جس نے جاوا میں فنکشنل پروگرامنگ کے کچھ عناصر کو شامل کیا۔ امیر فائل مینجمنٹ کی صلاحیتوں سمیت. تصور کریں کہ ہمارے پاس ایک کام ہے: ایک فائل میں تمام لائنیں تلاش کریں جو لفظ "کیسے" سے شروع ہوتی ہے، انہیں UPPER CASE میں تبدیل کریں اور کنسول میں آؤٹ پٹ کریں۔ Files
جاوا 7 میں کلاس کا استعمال کرتے ہوئے حل کیسا نظر آئے گا ؟ کچھ اس طرح:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Main {
public static void main(String[] args) throws IOException {
List<String> lines = Files.readAllLines(Paths.get("C:\\Users\\Username\\Desktop\\pushkin.txt"), UTF_8);
List<String> result = new ArrayList<>();
for (String s: lines) {
if (s.startsWith("How")) {
String upper = s.toUpperCase();
result.add(upper);
}
}
for (String s: result) {
System.out.println(s);
}
}
}
کنسول آؤٹ پٹ: روزہ رکھنے والے وژن کی طرح، خالص خوبصورتی کے جینیئس کی طرح۔ ایسا لگتا ہے کہ ہم نے یہ کر لیا ہے، لیکن کیا آپ کو نہیں لگتا کہ اتنے آسان کام کے لیے ہمارا کوڈ تھوڑا سا... لفظی نکلا؟ جاوا 8 اسٹریم API کا استعمال کرتے ہوئے حل بہت زیادہ خوبصورت لگتا ہے:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) throws IOException {
Stream<String> stream = Files.lines(Paths.get("C:\\Users\\Username\\Desktop\\pushkin.txt"));
List<String> result = stream
.filter(line -> line.startsWith("How"))
.map(String::toUpperCase)
.collect(Collectors.toList());
result.forEach(System.out::println);
}
}
ہم نے وہی نتیجہ حاصل کیا، لیکن بہت کم کوڈ کے ساتھ! مزید یہ کہ یہ نہیں کہا جا سکتا کہ ہم "پڑھنے کی اہلیت" میں کھو چکے ہیں۔ میرے خیال میں آپ آسانی سے اس پر تبصرہ کر سکتے ہیں کہ یہ کوڈ کیا کرتا ہے، چاہے آپ Stream API سے واقف نہ ہوں۔ لیکن مختصر میں، ایک سلسلہ عناصر کا ایک سلسلہ ہے جس پر آپ مختلف افعال انجام دے سکتے ہیں۔ ہمیں طریقہ سے اسٹریم آبجیکٹ ملتا ہے Files.lines()
اور پھر اس پر 3 فنکشن لاگو ہوتے ہیں:
-
طریقہ استعمال کرتے ہوئے،
filter()
ہم فائل سے صرف وہی لائنیں منتخب کرتے ہیں جو "کیسے" سے شروع ہوتی ہیں۔ -
ہم طریقہ استعمال کرتے ہوئے تمام منتخب لائنوں سے گزرتے ہیں
map()
اور ان میں سے ہر ایک کو UPPER CASE میں لاتے ہیں۔ -
ہم تمام نتیجے میں آنے والی لائنوں کو
List
استعمال کرنے میں یکجا کرتے ہیںcollect()
۔
Files.walkFileTree()
. یہاں ہمیں کیا کرنے کی ضرورت ہے۔ سب سے پہلے، ہمیں ضرورت ہے FileVisitor
. FileVisitor
ایک خاص انٹرفیس ہے جو فائل ٹری کو عبور کرنے کے تمام طریقوں کی وضاحت کرتا ہے۔ خاص طور پر، ہم فائل کے مواد کو پڑھنے کے لیے وہاں منطق ڈالیں گے اور چیک کریں گے کہ آیا اس میں وہ متن موجود ہے جس کی ہمیں ضرورت ہے۔ یہ وہی ہے جو ہمارا نظر آئے گا FileVisitor
:
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.List;
public class MyFileVisitor extends SimpleFileVisitor<Path> {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
List<String> lines = Files.readAllLines(file);
for (String s: lines) {
if (s.contains("This is the file we need")) {
System.out.println("Required file found!");
System.out.println(file.toAbsolutePath());
break;
}
}
return FileVisitResult.CONTINUE;
}
}
اس صورت میں، ہماری کلاس وراثت میں ملتی ہے SimpleFileVisitor
۔ یہ ایک ایسی کلاس ہے جو لاگو کرتی ہے FileVisitor
، جس میں آپ کو صرف ایک طریقہ کو اوور رائڈ کرنے کی ضرورت ہے: visitFile()
۔ یہاں ہم بیان کرتے ہیں کہ ہر ڈائریکٹری میں ہر فائل کے ساتھ کیا کرنے کی ضرورت ہے۔ اگر آپ کو زیادہ پیچیدہ ٹراورسل منطق کی ضرورت ہے، تو آپ کو خود اپنا نفاذ لکھنا چاہیے FileVisitor
۔ وہاں آپ کو مزید 3 طریقوں کو لاگو کرنے کی ضرورت ہوگی:
-
preVisitDirectory()
- منطق جسے فولڈر میں داخل ہونے سے پہلے عمل میں لایا جانا چاہیے؛ -
visitFileFailed()
- اگر فائل میں داخل ہونا ناممکن ہو تو کیا کریں (کوئی رسائی نہیں، یا دیگر وجوہات)؛ -
postVisitDirectory()
- وہ منطق جسے فولڈر میں داخل ہونے کے بعد عمل میں لایا جانا چاہیے۔
SimpleFileVisitor
۔ طریقہ کار کے اندر کی منطق visitFile()
کافی آسان ہے: فائل کی تمام سطروں کو پڑھیں، چیک کریں کہ آیا ان میں وہ مواد ہے جس کی ہمیں ضرورت ہے، اور اگر ایسا ہے تو کنسول کے مطلق راستے کو پرنٹ کریں۔ صرف ایک لائن جو آپ کو پریشانی کا باعث بن سکتی ہے وہ یہ ہے:
return FileVisitResult.CONTINUE;
اصل میں، سب کچھ آسان ہے. یہاں ہم صرف یہ بیان کرتے ہیں کہ فائل داخل ہونے اور تمام ضروری کارروائیاں مکمل ہونے کے بعد پروگرام کو کیا کرنا چاہیے۔ ہمارے معاملے میں، ہمیں درخت سے گزرنا جاری رکھنے کی ضرورت ہے، لہذا ہم آپشن کا انتخاب کرتے ہیں CONTINUE
۔ لیکن ہمارے پاس، مثال کے طور پر، ایک اور کام ہو سکتا ہے: وہ تمام فائلیں تلاش کرنا جن میں "یہ وہ فائل ہے جس کی ہمیں ضرورت ہے" پر مشتمل نہیں، بلکہ صرف ایک ایسی فائل ۔ اس کے بعد، پروگرام کو ختم کرنا ضروری ہے. اس صورت میں، ہمارا کوڈ بالکل ایک جیسا نظر آئے گا، لیکن وقفے کے بجائے؛ کرے گا:
return FileVisitResult.TERMINATE;
ٹھیک ہے، آئیے اپنا کوڈ چلائیں اور دیکھیں کہ آیا یہ کام کرتا ہے۔
import java.io.IOException;
import java.nio.file.*;
public class Main {
public static void main(String[] args) throws IOException {
Files.walkFileTree(Paths.get("C:\\Users\\Username\\Desktop\\testFolder"), new MyFileVisitor());
}
}
کنسول آؤٹ پٹ: مطلوبہ فائل مل گئی ہے! C:\Users\Username\Desktop\testFolder\FileWeNeed1.txt مطلوبہ فائل مل گئی! C:\Users\Username\Desktop\testFolder\level1-a\level2-aa\FileWeNeed2.txt مطلوبہ فائل مل گئی! C:\Users\Username\Desktop\testFolder\level1-b\level2-bb\FileWeNeed3.txt بہت اچھا، ہم نے یہ کیا! :) اگر آپ اس کے بارے میں مزید جاننا چاہتے ہیں walkFileTree()
تو میں آپ کو اس مضمون کی سفارش کرتا ہوں ۔ آپ ایک چھوٹا سا کام بھی مکمل کر سکتے ہیں - اسے SimpleFileVisitor
ایک باقاعدہ سے بدل دیں FileVisitor
، تمام 4 طریقوں کو نافذ کریں اور اس پروگرام کے لیے ایک مقصد کے ساتھ آئیں۔ مثال کے طور پر، آپ ایک ایسا پروگرام لکھ سکتے ہیں جو آپ کے تمام اعمال کو لاگ کرے گا: کنسول میں فائل یا فولڈر کا نام داخل کرنے سے پہلے/بعد میں ڈسپلے کریں۔ بس یہی ہے - بعد میں ملتے ہیں! :)
GO TO FULL VERSION