আমি জাভাতে কীভাবে কোনও ফাইলকে এক স্থান থেকে অন্য স্থানে স্থানান্তর করব?


95

আপনি কীভাবে একটি ফাইল অন্য জায়গা থেকে সরিয়ে নিয়ে যাবেন? আমি যখন আমার প্রোগ্রামটি চালনা করি তখন সেই স্থানে তৈরি হওয়া যে কোনও ফাইল স্বয়ংক্রিয়ভাবে নির্দিষ্ট স্থানে চলে যায়। আমি কীভাবে জানব যে কোন ফাইলটি সরানো হয়েছে?


প্রথমে আপনি একটি ফাইল কীভাবে স্থানান্তর করবেন সে সম্পর্কে জিজ্ঞাসা করুন, তারপরে আপনি বলবেন যে কিছু ফাইল স্বয়ংক্রিয়ভাবে সরানো হচ্ছে। আপনি কি আপনার প্রশ্নটিকে আরও পরিষ্কার করতে পারবেন?
জাইমে হাবলুটজেল

উত্তর:


132
myFile.renameTo(new File("/the/new/place/newName.file"));

ফাইল # পুনর্নবীকরণ এটি করে (এটি কেবল নতুন নাম পরিবর্তন করতে পারে না, অন্তত একই ফাইল সিস্টেমে ডিরেক্টরিগুলির মধ্যেও স্থানান্তর করতে পারে)।

এই বিমূর্ত পাথনাম দ্বারা চিহ্নিত ফাইলটির নাম পরিবর্তন করে।

এই পদ্ধতির আচরণের অনেকগুলি দিক অন্তর্নিহিত প্ল্যাটফর্ম-নির্ভর: পুনরায় নামকরণ অপারেশন একটি ফাইল সিস্টেম থেকে অন্য কোনও ফাইল স্থানান্তর করতে সক্ষম না হতে পারে, এটি পারমাণবিক নাও হতে পারে, এবং গন্তব্য বিমূর্ত পথের নামের কোনও ফাইল যদি এটি সফল নাও হতে পারে আগে থেকেই আছে. পুনরায় নামকরণ অপারেশন সফল হয়েছে তা নিশ্চিত করতে রিটার্ন মানটি সর্বদা পরীক্ষা করা উচিত।

আপনার যদি আরও বিস্তৃত সমাধানের প্রয়োজন হয় (যেমন ডিস্কের মধ্যে ফাইলটি সরিয়ে নিতে চান), অ্যাপাচি কমন্স ফাইল ইউটিলেস # মুভিফাইলে দেখুন


9
myFile.renameTo (নতুন ফাইল ("/ নতুন / স্থান / newname.file"));
jangofan

4
হ্যাঁ, কেবলমাত্র নতুন অভিভাবক ডিরেক্টরিটি দেবেন না। এবং নিশ্চিত করুন যে সেখানে পথটি ইতিমধ্যে বিদ্যমান।
থিলো

4
মনে রাখবেন যে myFileএই আদেশ দ্বারা অবজেক্টের পথ আপডেট করা হয়নি। সুতরাং এটি কোনও ফাইলের দিকে ইঙ্গিত করবে যা আর নেই।
এভেজেনি সার্জিভ

4
@ সুলেমানখান - হ্যাঁ, এটি ফাইলটিও মুছে দেয়। এটি সত্যিই এটি ফাইল সিস্টেমে স্থানান্তরিত করে
লিওল

4
@ জুলিয়েনক্রোনগ: এটি সম্ভবত আপনার ওএস / ফাইল সিস্টেমের উপর নির্ভর করে। আমার মনে হয় লিনাক্সে আপনি বর্তমানে খোলা ফাইলগুলি (বা মুছুন) সরিয়ে নিতে পারেন (এবং বিদ্যমান ফাইল হ্যান্ডেলটির মাধ্যমে সেগুলি অ্যাক্সেস করতে চালিয়ে যেতে পারেন) তবে উইন্ডোজে নয়।
থিলো

63

জাভা 7 বা আরও নতুন দিয়ে আপনি ব্যবহার করতে পারেন Files.move(from, to, CopyOption... options)

যেমন

Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);

দেখুন ফাইল আরো বিস্তারিত জানার জন্য ডকুমেন্টেশন


4
ফাইল.মোভ ব্যবহার করে একটি java.nio.file.NoSuchFileException পেয়েছে
zhuochen shen

5

একটি ফাইল সরানোর জন্য আপনি জাকার্তা কমন্স আইওএস ফাইলআপিলস.মোভ ফাইল ব্যবহার করতে পারেন

ত্রুটিতে এটি একটি নিক্ষেপ করে IOException, সুতরাং যখন কোনও ব্যতিক্রম ছুঁড়ে না ফেলা হয় আপনি জানেন যে ফাইলটি সরানো হয়েছিল।



4

কেবল উত্স এবং গন্তব্য ফোল্ডার পাথ যুক্ত করুন।

এটি উত্স ফোল্ডার থেকে সমস্ত ফাইল এবং ফোল্ডারটিকে গন্তব্য ফোল্ডারে সরিয়ে ফেলবে।

    File destinationFolder = new File("");
    File sourceFolder = new File("");

    if (!destinationFolder.exists())
    {
        destinationFolder.mkdirs();
    }

    // Check weather source exists and it is folder.
    if (sourceFolder.exists() && sourceFolder.isDirectory())
    {
        // Get list of the files and iterate over them
        File[] listOfFiles = sourceFolder.listFiles();

        if (listOfFiles != null)
        {
            for (File child : listOfFiles )
            {
                // Move files to destination folder
                child.renameTo(new File(destinationFolder + "\\" + child.getName()));
            }

            // Add if you want to delete the source folder 
            sourceFolder.delete();
        }
    }
    else
    {
        System.out.println(sourceFolder + "  Folder does not exists");
    }

4

জাভা 6

public boolean moveFile(String sourcePath, String targetPath) {

    File fileToMove = new File(sourcePath);

    return fileToMove.renameTo(new File(targetPath));
}

জাভা 7 (এনআইও ব্যবহার করে)

public boolean moveFile(String sourcePath, String targetPath) {

    boolean fileMoved = true;

    try {

        Files.move(Paths.get(sourcePath), Paths.get(targetPath), StandardCopyOption.REPLACE_EXISTING);

    } catch (Exception e) {

        fileMoved = false;
        e.printStackTrace();
    }

    return fileMoved;
}

2

আপনি সেই কাজের জন্য ( copyএকটি উইন্ডো পরিবেশের মতো) জন্য একটি বাহ্যিক সরঞ্জাম কার্যকর করতে পারেন তবে কোড পোর্টেবল রাখতে, সাধারণ পদ্ধতির জন্য:

  1. উত্স ফাইলটি মেমরিতে পড়ুন
  2. নতুন স্থানে একটি ফাইলে বিষয়বস্তু লিখুন
  3. উত্স ফাইল মুছুন

File#renameToউত্স এবং লক্ষ্য অবস্থান একই ভলিউমে যতক্ষণ কাজ করবে। ব্যক্তিগতভাবে আমি ফাইলগুলি বিভিন্ন ফোল্ডারে স্থানান্তরিত করতে এড়াতে চাইতাম।


@ বুলিউইআইপ্লাজা: থিলোর উত্তরে বড় দাবি অস্বীকার করুন। এটি কয়েকটি প্ল্যাটফর্মে (যেমন উইন্ডোজ) বিভিন্নভাবে ভাঙ্গা।
অ্যান্ড্রুবুর্জোয়া



0

আমার নিজস্ব প্রকল্পে এই কাজটি করার জন্য এই পদ্ধতিটি লিখেছেন কেবলমাত্র বিদ্যমান প্রতি যুক্তি যদি প্রতিস্থাপন ফাইলের সাথে থাকে।

// we use the older file i/o operations for this rather than the newer jdk7+ Files.move() operation
private boolean moveFileToDirectory(File sourceFile, String targetPath) {
    File tDir = new File(targetPath);
    if (tDir.exists()) {
        String newFilePath = targetPath+File.separator+sourceFile.getName();
        File movedFile = new File(newFilePath);
        if (movedFile.exists())
            movedFile.delete();
        return sourceFile.renameTo(new File(newFilePath));
    } else {
        LOG.warn("unable to move file "+sourceFile.getName()+" to directory "+targetPath+" -> target directory does not exist");
        return false;
    }       
}

0

এটি চেষ্টা করুন।

 private boolean filemovetoanotherfolder(String sourcefolder, String destinationfolder, String filename) {
            boolean ismove = false;
            InputStream inStream = null;
            OutputStream outStream = null;

            try {

                File afile = new File(sourcefolder + filename);
                File bfile = new File(destinationfolder + filename);

                inStream = new FileInputStream(afile);
                outStream = new FileOutputStream(bfile);

                byte[] buffer = new byte[1024 * 4];

                int length;
                // copy the file content in bytes
                while ((length = inStream.read(buffer)) > 0) {

                outStream.write(buffer, 0, length);

                }


                // delete the original file
                afile.delete();
                ismove = true;
                System.out.println("File is copied successful!");

            } catch (IOException e) {
                e.printStackTrace();
            }finally{
               inStream.close();
               outStream.close();
            }
            return ismove;
            }

4
closeনির্দেশাবলী যদি কোনও finallyব্লকের মধ্যে থাকে বা এটি যদি একটি সংস্থান-সংস্থানসমূহ ব্যবহার করার চেষ্টা করে তবে এটি আরও দৃust় হবে ।
মিকাএলএফ

আমি এটি পরিবর্তন করেছি এখন এটি ঠিক হওয়া উচিত
সরঙ্গা কাপিলারথ্না

0

আপনি এটি চেষ্টা করতে পারেন .. পরিষ্কার সমাধান

Files.move(source, target, REPLACE_EXISTING);

এটি আমাকে দেয়javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: REPLACE_EXISTING
এমএসআউটপিকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.