নিখোঁজ পিতা-মাতার ডিরেক্টরিগুলির সাথে কীভাবে একটি নতুন ফাইল তৈরি করবেন?


100

ব্যবহার করার সময়

file.createNewFile();

আমি নিম্নলিখিত ব্যতিক্রম পাই

java.io.IOException: Parent directory of file does not exist: /.../pkg/databases/mydb

আমি ভাবছি এমন কোনও ক্রিয়েটনিউইফাইল রয়েছে যা অনুপস্থিত পিতামাতার ডিরেক্টরিগুলি তৈরি করে?

উত্তর:


151

আপনি কি এই চেষ্টা করেছেন?

file.getParentFile().mkdirs();
file.createNewFile();

আমি জানি না যে একটি একক পদ্ধতি কল এটি করবে, তবে এটি দুটি বিবৃতি হিসাবে বেশ সহজ।


এটি কেবলমাত্র কাজ করে ফাইল একটি পাথ স্ট্রিং যা পেরেন্ট ডাইরেক্টরি, অর্থাত্ থাকা তৈরি করা হয়েছে new File("file.txt").getParentFile()আয় null, new File("dir/file.txt").getParentFile()হিসাবে একই ফেরৎnew File("dir")
Zoltán

4
এটা ঠিক যে, আপনি প্রয়োজন নেই mkdirsযদি আপনি যে ফাইলটি তৈরি করার চেষ্টা করছেন একটি অবর্তমান ডিরেক্টরির মধ্যে নয়, কিন্তু আমার ব্যবহার ক্ষেত্রে যে আমি একাধিক ফাইল, তৈরি করছি কিছু যা, পিতা বা মাতা ডিরেক্টরি আছে অন্যরা না।
জোল্টন

14

জনের উত্তর যদি আপনি নিশ্চিত হন যে আপনি যে ফাইলটির সাথে ফাইল তৈরি করছেন সে ক্ষেত্রে প্যারেন্ট ডিরেক্টরিগুলি অন্তর্ভুক্ত রয়েছে, অর্থাত যদি আপনি নিশ্চিত হন যে পথটি ফর্মের <parent-dir>/<file-name>

যদি এটি না হয়, অর্থাত্ এটি ফর্মের একটি আপেক্ষিক পথ <file-name>, তবে getParentFile()ফিরে আসবে null

যেমন

File f = new File("dir/text.txt");
f.getParentFile().mkdirs();     // works fine because the path includes a parent directory.

File f = new File("text.txt");
f.getParentFile().mkdirs();     // throws NullPointerException because the parent file is unknown, i.e. `null`.

সুতরাং যদি আপনার ফাইলপথটি পিতামাত ডিরেক্টরিগুলি অন্তর্ভুক্ত করতে পারে বা নাও পারে তবে আপনি নিম্নলিখিত কোডের সাথে সুরক্ষিত:

File f = new File(filename);
if (f.getParentFile() != null) {
  f.getParentFile().mkdirs();
}
f.createNewFile();

অনেক কারণে আপনার সর্বদা একটি পথ অন্তর্ভুক্ত করা উচিত। আপনি কোথায় এই ফাইলটি স্থাপন করতে চান তা অন্য সিস্টেমটিকে কীভাবে জানা উচিত?
নিককিডি

@ নিককিডি আমি দুঃখিত, আমি আপনার মন্তব্যটি বেশ বুঝতে পারি না। আমার উত্তরে, আমি বলছি না যে আপনি কোনও পথ অন্তর্ভুক্ত করছেন না, তবে যে পথটি পেরিয়ে গেছে তাতে পিতামহিত ডিরেক্টরি অন্তর্ভুক্ত থাকতে পারে । উত্তরে এরকম একটি পথের উদাহরণও রয়েছে।
জোল্টন

10

Java7 হিসাবে, আপনি NIO2 এপিআই ব্যবহার করতে পারেন:

void createFile() throws IOException {
    Path fp = Paths.get("dir1/dir2/newfile.txt");
    Files.createDirectories(fp.getParent());
    Files.createFile(fp);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.