জাভাতে একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে ফাইল অনুলিপি করা


156

আমি জাভা ব্যবহার করে একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে (উপ-ডিরেক্টরি) অনুলিপি করতে চাই। টেক্সট ফাইল সহ আমার একটি ডিরেক্টরি আছে আমি dir প্রথম 20 টি ফাইলের উপর পুনরাবৃত্তি করি এবং সেগুলি dir ডিরেক্টরিতে অন্য ডিরেক্টরিতে অনুলিপি করতে চাই, যা আমি পুনরাবৃত্তির ঠিক আগে তৈরি করেছি। reviewকোডটিতে , আমি এতে (যা ith পাঠ্য ফাইল বা পর্যালোচনা উপস্থাপন করে) অনুলিপি করতে চাই trainingDir। কিভাবে আমি এটি করতে পারব? এমন কোনও অনুষ্ঠান বলে মনে হচ্ছে না (বা আমি খুঁজে পেলাম না)। ধন্যবাদ.

boolean success = false;
File[] reviews = dir.listFiles();
String trainingDir = dir.getAbsolutePath() + "/trainingData";
File trDir = new File(trainingDir);
success = trDir.mkdir();
for(int i = 1; i <= 20; i++) {
    File review = reviews[i];

}

সুতরাং, আপনার কাছে ফাইলগুলি পূর্ণ একটি ডিরেক্টরি রয়েছে এবং আপনি কেবল এই ফাইলগুলি অনুলিপি করতে চান? ইনপুট দিকে কোনও পুনরাবৃত্তি নেই - উদাহরণস্বরূপ সাবডায়ার্স থেকে সমস্ত প্রধান ডিয়ারে অনুলিপি করবেন?
আকনারোকড

হ্যাঁ অবশ্যই. আমি এই ফাইলগুলিকে কেবল অনুলিপি করা বা অন্য ডিরেক্টরিতে স্থানান্তরিত করতে আগ্রহী (যদিও পোস্টে আমি কেবল অনুলিপি চেয়েছি)।
ব্যবহারকারীর 212155

3
ভবিষ্যত থেকে আপডেট। জাভা 7-তে ফাইলগুলি অনুলিপি করার জন্য ফাইল শ্রেণীর একটি বৈশিষ্ট্য রয়েছে । এখানে এটি সম্পর্কে আরেকটি পোস্ট stackoverflow.com/questions/16433915/...
KevinL

উত্তর:


170

আপাতত এটি আপনার সমস্যার সমাধান করা উচিত

File source = new File("H:\\work-temp\\file");
File dest = new File("H:\\work-temp\\file2");
try {
    FileUtils.copyDirectory(source, dest);
} catch (IOException e) {
    e.printStackTrace();
}

FileUtilsঅ্যাপাচি কমন্স-আইও লাইব্রেরি থেকে বর্গ , সংস্করণ 1.2 থেকে উপলব্ধ।

নিজের দ্বারা সমস্ত ইউটিলিটি লেখার পরিবর্তে তৃতীয় পক্ষের সরঞ্জামগুলি ব্যবহার করা আরও ভাল ধারণা বলে মনে হয়। এটি সময় এবং অন্যান্য মূল্যবান সংস্থান সংরক্ষণ করতে পারে।


ফাইলUtils আমার জন্য কাজ করে না। উত্স আমি "ই: \\ ব্যবহারকারী \\ ব্যবহারকারী.usr" এবং গন্তব্য "ডি: \\ ব্যবহারকারী.usr" হিসাবে নিয়েছি। কি সমস্যা হতে পারে?
জাভা

2
চমৎকার সমাধান, আমার জন্য, আমি যখন পরিবর্তন করি তখন এটি কাজ FileUtils.copyDirectory(source,dest)করে FileUtils.copyFile(source, dest), এটি উপস্থিত না থাকলে ডিরেক্টরি তৈরি করতে পারে
yuqizhang

ফাইল ইউটিলস.কপি ডিরেক্টরি ডিরেক্টরি কেবলমাত্র ডিরেক্টরিতে ফাইলগুলি উপ-ডিরেক্টরিতে অনুলিপি করে। ফাইল ইউটিলসকপিডিডাইরেক্টরি স্ট্রাকচার সমস্ত ফাইল এবং উপ
হোমায়ুন বেহজাদিয়ান

41

স্ট্যান্ডার্ড এপিআইতে কোনও ফাইল অনুলিপি পদ্ধতি নেই (এখনও)। আপনার বিকল্পগুলি হ'ল:

  • একে নিজেই লিখে ফেলুন, ফাইলআইনপুটস্ট্রিম, একটি ফাইলআউটপুট স্ট্রিম এবং একটির থেকে অন্যের বাইটগুলি অনুলিপি করতে বাফার ব্যবহার করে - বা আরও ভাল, ফাইলচ্যানেল.টান্সফারটো () ব্যবহার করুন
  • ব্যবহারকারী অ্যাপাচি কমন্সের ফাইল ইউটিলস
  • জাভা 7 এ এনআইও 2 এর জন্য অপেক্ষা করুন

এনআইও 2 এর জন্য +1: আমি আজকাল এনআইও 2 / জাভা 7 নিয়ে পরীক্ষা নিরীক্ষা করছি .. এবং নতুন পথটি খুব ভাল ইঞ্জিনিয়ারড
ডিএফএ

ঠিক আছে, জাভা 7 এ এটি কীভাবে করবেন? এনআইও 2 লিঙ্কটি এখন ভেঙে গেছে।
ripper234

5
@ রিপার 234: লিঙ্ক স্থির। নোট করুন যে আমি গুগলে "জাভা নিও 2" প্রবেশ করে নতুন লিঙ্কটি পেয়েছি ...
মাইকেল বর্গওয়ার্ট

অ্যাপাচি কমন্স লিঙ্কটির জন্য, আমি মনে করি আপনি "# কপিডাইরেক্টরি (java.io.File, java.io.File)"
কোস্টমো

37

জাভা 7, সেখানে হয় জাভা ফাইল কপি করতে একটি প্রমিত পদ্ধতি:

Files.copy।

এটি উচ্চ পারফরম্যান্সের জন্য ও / এস নেটিভেন I / O এর সাথে সংহত করে।

জাভাতে কোনও ফাইল অনুলিপি করার জন্য আমার স্ট্যান্ডার্ড সংক্ষিপ্ত উপায়ে দেখুন ? ব্যবহারের সম্পূর্ণ বিবরণের জন্য।


6
এটি পুরো ডিরেক্টরিগুলি অনুলিপি করার প্রশ্নকে সম্বোধন করে না।
চার্লি

হ্যাঁ এটি করে ... যদি আপনি লিঙ্কটি অনুসরণ করেন। ভুলে যাবেন না যে জাভাতে থাকা একটি "ফাইল" কোনও ডিরেক্টরি বা ফাইল উপস্থাপন করতে পারে, এটি কেবল একটি রেফারেন্স।
গাগারওয়া

"যদি ফাইলটি ডিরেক্টরি হয় তবে এটি লক্ষ্য স্থানে একটি ফাঁকা ডিরেক্টরি তৈরি করে (ডিরেক্টরিতে প্রবেশকারীদের অনুলিপি করা হয়নি)"
ইউরেজ

27

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

 public void copyDirectory(File sourceLocation , File targetLocation)
    throws IOException {

        if (sourceLocation.isDirectory()) {
            if (!targetLocation.exists()) {
                targetLocation.mkdir();
            }

            String[] children = sourceLocation.list();
            for (int i=0; i<children.length; i++) {
                copyDirectory(new File(sourceLocation, children[i]),
                        new File(targetLocation, children[i]));
            }
        } else {

            InputStream in = new FileInputStream(sourceLocation);
            OutputStream out = new FileOutputStream(targetLocation);

            // Copy the bits from instream to outstream
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
        }
    }

আপনাকে ধন্যবাদ, তবে আমি ডিরেক্টরিটি অনুলিপি করতে চাই না - কেবল এতে থাকা ফাইলগুলি। এখন আমি java.io.FileNotFoundException ত্রুটি বার্তা পেয়েছি: (trDir করার পথ) (একটি ডিরেক্টরি) এটি কেবল এটিই বলে। আমি এই পদ্ধতিটি ব্যবহার করেছি: অনুলিপি ডিরেক্টরি (পর্যালোচনা, trDir);
user42155

ধন্যবাদ, sourceLocation.exists()প্রতিরোধের ক্ষেত্রে কী তা পরীক্ষা করা ভালjava.io.FileNotFoundException
Sdghasemi

19

আপনি যদি কোনও ফাইল অনুলিপি করতে চান এবং তা না সরান আপনি এই জাতীয় কোড করতে পারেন।

private static void copyFile(File sourceFile, File destFile)
        throws IOException {
    if (!sourceFile.exists()) {
        return;
    }
    if (!destFile.exists()) {
        destFile.createNewFile();
    }
    FileChannel source = null;
    FileChannel destination = null;
    source = new FileInputStream(sourceFile).getChannel();
    destination = new FileOutputStream(destFile).getChannel();
    if (destination != null && source != null) {
        destination.transferFrom(source, 0, source.size());
    }
    if (source != null) {
        source.close();
    }
    if (destination != null) {
        destination.close();
    }

}

হাই, আমি এটি চেষ্টা করেছি, তবে আমি ত্রুটি বার্তাগুলি পেয়েছি: java.io.FileNotFoundException: ... trDir এর পথ ... (একটি ডিরেক্টরি) আমার ফাইল এবং ফোল্ডারগুলির সবকিছু ঠিক আছে বলে মনে হচ্ছে। আপনি কি জানেন যে এটি কী ভুল হচ্ছে, এবং কেন আমি এটি পেয়েছি?
user42155

কিন্তু ট্রান্সফারের চারপাশে উইন্ডোজ বাগ নেই যা এক টুকরোতে 64 এমবি এর চেয়ে বড় স্ট্রিমগুলি অনুলিপি করতে সক্ষম নয়? bugs.sun.com/bugdatedia/view_bug.do?bug_id=4938442 ফিক্স rgagnon.com/javadetails/java-0064.html
আকারোকড

আমি উবুন্টু 8.10 ব্যবহার করছি, সুতরাং এটি সমস্যা হওয়া উচিত নয়।
ব্যবহারকারীর 212155

আপনি যদি নিশ্চিত হন যে আপনার কোডটি কখনই বিভিন্ন প্ল্যাটফর্মে চলবে না।
আকনারোকড

@gemm ফাইলটি অনুলিপি করা উচিত ডাস্টফিলের সঠিক পথ হতে হবে। এর অর্থ হল যে নতুন ডিরেক্টরিতে ফাইলটি আপনি অনুলিপি করতে চান তা নয় including
জানুস

18

স্প্রিং ফ্রেমওয়ার্কে অ্যাপাচি কমন্স ল্যাংয়ের মতো অনেকগুলি অনুরূপ ব্যবহারের ক্লাস রয়েছে। সুতরাং আছেorg.springframework.util.FileSystemUtils

File src = new File("/home/user/src");
File dest = new File("/home/user/dest");
FileSystemUtils.copyRecursively(src, dest);

15

অ্যাপাচি কমন্স ফাইলুটিলসটি সহজ। আপনি নীচে কার্যক্রম করতে পারেন।

  1. একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে ফাইল অনুলিপি করা।

    ব্যবহার copyFileToDirectory(File srcFile, File destDir)

  2. এক ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে ডিরেক্টরি অনুলিপি করা।

    ব্যবহার copyDirectory(File srcDir, File destDir)

  3. অন্য একটি ফাইলের বিষয়বস্তু অনুলিপি করা

    ব্যবহার static void copyFile(File srcFile, File destFile)


9
File sourceFile = new File("C:\\Users\\Demo\\Downloads\\employee\\"+img);
File destinationFile = new File("\\images\\" + sourceFile.getName());

FileInputStream fileInputStream = new FileInputStream(sourceFile);
FileOutputStream fileOutputStream = new FileOutputStream(
                destinationFile);

int bufferSize;
byte[] bufffer = new byte[512];
while ((bufferSize = fileInputStream.read(bufffer)) > 0) {
    fileOutputStream.write(bufffer, 0, bufferSize);
}
fileInputStream.close();
fileOutputStream.close();

1
পরিষ্কার, সহজ উত্তর - অতিরিক্ত নির্ভরতা নেই।
ক্লোকার

আপনি দয়া করে প্রথম 2 লাইন বর্ণনা করতে পারে!
এভিএ


8

অ্যাপাচি কমন্স ফাইল ইউটিসগুলি কার্যকর হবে, আপনি যদি পুরো ডিরেক্টরিটি অনুলিপি না করে কেবল ডিরেক্টরি থেকে টার্গেট ডিরেক্টরি থেকে ফাইলগুলি সরিয়ে নিতে চান তবে আপনি এটি করতে পারেন:

for (File srcFile: srcDir.listFiles()) {
    if (srcFile.isDirectory()) {
        FileUtils.copyDirectoryToDirectory(srcFile, dstDir);
    } else {
        FileUtils.copyFileToDirectory(srcFile, dstDir);
    }
}

আপনি যদি ডিরেক্টরিগুলি এড়িয়ে যেতে চান তবে আপনি এটি করতে পারেন:

for (File srcFile: srcDir.listFiles()) {
    if (!srcFile.isDirectory()) {
        FileUtils.copyFileToDirectory(srcFile, dstDir);
    }
}

2
copyFileToDirectory নয় "পদক্ষেপ" ফাইল আছে
aleb

7

আপনি সহজ সমাধান (ভাল জিনিস) সন্ধান করছেন বলে মনে হচ্ছে। আমি অ্যাপাচি কমন এর ফাইল ইউটেলস.কপি ডিরেক্টরিটি ব্যবহার করার পরামর্শ দিচ্ছি :

ফাইলের তারিখগুলি সংরক্ষণ করে একটি নতুন ডিরেক্টরিতে একটি সম্পূর্ণ ডিরেক্টরি অনুলিপি করে।

এই পদ্ধতিটি নির্দিষ্ট গন্তব্যটিতে নির্দিষ্ট ডিরেক্টরি এবং তার সমস্ত শিশু ডিরেক্টরি এবং ফাইলগুলি অনুলিপি করে। গন্তব্যটি ডিরেক্টরিটির নতুন অবস্থান এবং নাম।

গন্তব্য ডিরেক্টরিটি উপস্থিত না থাকলে তৈরি করা হয়। গন্তব্য ডিরেক্টরি যদি বিদ্যমান থাকে, তবে এই পদ্ধতিটি উত্সটিকে অগ্রাধিকার গ্রহণের সাথে গন্তব্যের সাথে একত্রিত করে।

আপনার কোডটি এর মতো সুন্দর এবং সাধারণ পছন্দ করতে পারে:

File trgDir = new File("/tmp/myTarget/");
File srcDir = new File("/tmp/mySource/");

FileUtils.copyDirectory(srcDir, trgDir);

হাই, আমি ডিরেক্টরিটি অনুলিপি করতে চাই না - কেবল এতে থাকা ফাইলগুলি।
ব্যবহারকারী42155

এটি মূলত একই জিনিস, না? উত্স ডিরেক্টরি থেকে সমস্ত ফাইল লক্ষ্য ডিরেক্টরিতে শেষ হবে।
স্টু থম্পসন

1
ফাইলগুলি পড়া এবং তারপরে ফাইলগুলি লেখার চেয়ে অনেক বেশি ভাল পদ্ধতি। +1
অপ্টিমাস প্রাইম

6

এই থ্রেডে মোহিতের উত্তরে অনুপ্রাণিত । শুধুমাত্র জাভা 8 এর জন্য প্রযোজ্য।

নিম্নলিখিতগুলি একটি ফোল্ডার থেকে অন্য ফোল্ডারে পুনরাবৃত্তভাবে সমস্ত কিছু অনুলিপি করতে ব্যবহার করা যেতে পারে:

public static void main(String[] args) throws IOException {
    Path source = Paths.get("/path/to/source/dir");
    Path destination = Paths.get("/path/to/dest/dir");

    List<Path> sources = Files.walk(source).collect(toList());
    List<Path> destinations = sources.stream()
            .map(source::relativize)
            .map(destination::resolve)
            .collect(toList());

    for (int i = 0; i < sources.size(); i++) {
        Files.copy(sources.get(i), destinations.get(i));
    }
}

স্ট্রিম-স্টাইল এফটিডব্লিউ।

আপডেট 2019-06-10: গুরুত্বপূর্ণ নোট - ফাইলসওয়াক কল দ্বারা অর্জিত স্ট্রিমটি বন্ধ করুন (উদাহরণস্বরূপ-রিসোর্স ব্যবহার করে)। পয়েন্টটির জন্য @ জজনিসকে ধন্যবাদ


অসাধারণ!! কেউ মিলিয়ন ফাইল রয়েছে এমন ডিরেক্টরি অনুলিপি করতে চাইলে সমান্তরাল স্ট্রিম ব্যবহার করুন। আমি ফাইলগুলি অনুলিপি করার অগ্রগতিটি সহজেই দেখতে পারি, তবে জাভা 7 টি নিও কপিডাইরেক্টরি কমান্ডে, বড় ডিরেক্টরিতে আমি ব্যবহারকারীদের জন্য অগ্রগতি দেখাতে অক্ষম ছিল।
আকিল হায়দার

1
দস্তাবেজেরFiles.walk(source) পরামর্শ অনুযায়ী ফিরে আসা প্রবাহটি বন্ধ করার পরামর্শ দিচ্ছি বা আপনি সমস্যার মধ্যে পড়তে পারেন
জান্নিস

4

নীচে ব্রায়ানের পরিবর্তিত কোড রয়েছে যা উত্স অবস্থান থেকে গন্তব্যস্থানে ফাইলগুলি অনুলিপি করে।

public class CopyFiles {
 public static void copyFiles(File sourceLocation , File targetLocation)
    throws IOException {

        if (sourceLocation.isDirectory()) {
            if (!targetLocation.exists()) {
                targetLocation.mkdir();
            }
            File[] files = sourceLocation.listFiles();
            for(File file:files){
                InputStream in = new FileInputStream(file);
                OutputStream out = new FileOutputStream(targetLocation+"/"+file.getName());

                // Copy the bits from input stream to output stream
                byte[] buf = new byte[1024];
                int len;
                while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                in.close();
                out.close();
            }            
        }
    }

4

জাভা 8

Path sourcepath = Paths.get("C:\\data\\temp\\mydir");
        Path destinationepath = Paths.get("C:\\data\\temp\\destinationDir");        
        Files.walk(sourcepath)
             .forEach(source -> copy(source, destinationepath.resolve(sourcepath.relativize(source)))); 

কপি করার পদ্ধতি

static void copy(Path source, Path dest) {
        try {
            Files.copy(source, dest, StandardCopyOption.REPLACE_EXISTING);
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage(), e);
        }
    }

3

আপনি নতুন ফাইলটিতে উত্স ফাইলটি অনুলিপি করে মূলটি মুছতে পারেন।

public class MoveFileExample {

 public static void main(String[] args) {   

    InputStream inStream = null;
    OutputStream outStream = null;

    try {

        File afile = new File("C:\\folderA\\Afile.txt");
        File bfile = new File("C:\\folderB\\Afile.txt");

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

        byte[] buffer = new byte[1024];

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

        inStream.close();
        outStream.close();

        //delete the original file
        afile.delete();

        System.out.println("File is copied successful!");

    } catch(IOException e) {
        e.printStackTrace();
    }
 }
}

2

ব্যবহার

org.apache.commons.io.FileUtils

এটা খুব সহজ


4
আপনি যদি কোনও লাইব্রেরির পরামর্শ দিয়ে একটি উত্তর পোস্ট করতে চলেছেন তবে এটির নামটি উল্লেখ করার পরিবর্তে কীভাবে এটি ব্যবহার করবেন তা যদি আপনি প্রকৃতপক্ষে বর্ণনা করেন তবে ভাল লাগবে।
পোপ

2
File dir = new File("D:\\mital\\filestore");
File[] files = dir.listFiles(new File_Filter("*"+ strLine + "*.txt"));
for (File file : files){    
    System.out.println(file.getName());

    try {
        String sourceFile=dir+"\\"+file.getName();
        String destinationFile="D:\\mital\\storefile\\"+file.getName();
        FileInputStream fileInputStream = new FileInputStream(sourceFile);
        FileOutputStream fileOutputStream = new FileOutputStream(
                        destinationFile);
        int bufferSize;
        byte[] bufffer = new byte[512];
        while ((bufferSize = fileInputStream.read(bufffer)) > 0) {
            fileOutputStream.write(bufffer, 0, bufferSize);
        }
        fileInputStream.close();
        fileOutputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}


1

আমি CommonMultipartFileকোনও ফোল্ডারে আপলোড হওয়া স্থানান্তর করতে এবং ওয়েব ফাইলগুলিতে কোনও গন্তব্য ফোল্ডারে (যেমন) ওয়েব প্রকল্প ফোল্ডারে সেই ফাইলটি অনুলিপি করতে নিম্নলিখিত কোডটি ব্যবহার করি ,

    String resourcepath = "C:/resources/images/" + commonsMultipartFile.getOriginalFilename();

    File file = new File(resourcepath);
    commonsMultipartFile.transferTo(file);

    //Copy File to a Destination folder
    File destinationDir = new File("C:/Tomcat/webapps/myProject/resources/images/");
    FileUtils.copyFileToDirectory(file, destinationDir);

1

একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে ফাইল অনুলিপি করুন ...

FileChannel source=new FileInputStream(new File("source file path")).getChannel();
FileChannel desti=new FileOutputStream(new File("destination file path")).getChannel();
desti.transferFrom(source, 0, source.size());
source.close();
desti.close();

1

এক ফোল্ডার থেকে অন্য ফোল্ডারে ডেটা অনুলিপি করার জন্য এখানে কেবল জাভা কোড রয়েছে, আপনাকে কেবল উত্স এবং গন্তব্যের ইনপুট দিতে হবে।

import java.io.*;

public class CopyData {
static String source;
static String des;

static void dr(File fl,boolean first) throws IOException
{
    if(fl.isDirectory())
    {
        createDir(fl.getPath(),first);
        File flist[]=fl.listFiles();
        for(int i=0;i<flist.length;i++)
        {

            if(flist[i].isDirectory())
            {
                dr(flist[i],false);
            }

            else
            {

                copyData(flist[i].getPath());
            }
        }
    }

    else
    {
        copyData(fl.getPath());
    }
}

private static void copyData(String name) throws IOException {

        int i;
        String str=des;
        for(i=source.length();i<name.length();i++)
        {
            str=str+name.charAt(i);
        }
        System.out.println(str);
        FileInputStream fis=new FileInputStream(name);
        FileOutputStream fos=new FileOutputStream(str);
        byte[] buffer = new byte[1024];
        int noOfBytes = 0;
         while ((noOfBytes = fis.read(buffer)) != -1) {
             fos.write(buffer, 0, noOfBytes);
         }


}

private static void createDir(String name, boolean first) {

    int i;

    if(first==true)
    {
        for(i=name.length()-1;i>0;i--)
        {
            if(name.charAt(i)==92)
            {
                break;
            }
        }

        for(;i<name.length();i++)
        {
            des=des+name.charAt(i);
        }
    }
    else
    {
        String str=des;
        for(i=source.length();i<name.length();i++)
        {
            str=str+name.charAt(i);
        }
        (new File(str)).mkdirs();
    }

}

public static void main(String args[]) throws IOException
{
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.println("program to copy data from source to destination \n");
    System.out.print("enter source path : ");
    source=br.readLine();
    System.out.print("enter destination path : ");
    des=br.readLine();
    long startTime = System.currentTimeMillis();
    dr(new File(source),true);
    long endTime   = System.currentTimeMillis();
    long time=endTime-startTime;
    System.out.println("\n\n Time taken = "+time+" mili sec");
}

}

এটি আপনি যা চান তার জন্য এটি একটি কার্যকরী কোড..এটি সাহায্য করেছে কিনা আমাকে জানুন


আপনি কপিডাটাতে ফাইলআইপুট স্ট্রিম এবং ফাইলআউটপুটস্ট্রিম বন্ধ করতে ভুলে গেছেন।
এভারব্ল্যাক

0

একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে ফাইল অনুলিপি করতে আপনি নীচের কোডটি ব্যবহার করতে পারেন

// parent folders of dest must exist before calling this function
public static void copyTo( File src, File dest ) throws IOException {
     // recursively copy all the files of src folder if src is a directory
     if( src.isDirectory() ) {
         // creating parent folders where source files is to be copied
         dest.mkdirs();
         for( File sourceChild : src.listFiles() ) {
             File destChild = new File( dest, sourceChild.getName() );
             copyTo( sourceChild, destChild );
         }
     } 
     // copy the source file
     else {
         InputStream in = new FileInputStream( src );
         OutputStream out = new FileOutputStream( dest );
         writeThrough( in, out );
         in.close();
         out.close();
     }
 }

0
    File file = fileChooser.getSelectedFile();
    String selected = fc.getSelectedFile().getAbsolutePath();
     File srcDir = new File(selected);
     FileInputStream fii;
     FileOutputStream fio;
    try {
         fii = new FileInputStream(srcDir);
         fio = new FileOutputStream("C:\\LOvE.txt");
         byte [] b=new byte[1024];
         int i=0;
        try {
            while ((fii.read(b)) > 0)
            {

              System.out.println(b);
              fio.write(b);
            }
            fii.close();
            fio.close();

কী fileChooser?
দিনোপ পলোলি

0

একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে ফাইল অনুলিপি করতে নিম্নলিখিত কোডগুলি

File destFile = new File(targetDir.getAbsolutePath() + File.separator
    + file.getName());
try {
  showMessage("Copying " + file.getName());
  in = new BufferedInputStream(new FileInputStream(file));
  out = new BufferedOutputStream(new FileOutputStream(destFile));
  int n;
  while ((n = in.read()) != -1) {
    out.write(n);
  }
  showMessage("Copied " + file.getName());
} catch (Exception e) {
  showMessage("Cannot copy file " + file.getAbsolutePath());
} finally {
  if (in != null)
    try {
      in.close();
    } catch (Exception e) {
    }
  if (out != null)
    try {
      out.close();
    } catch (Exception e) {
    }
}

0
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyFiles {
    private File targetFolder;
    private int noOfFiles;
    public void copyDirectory(File sourceLocation, String destLocation)
            throws IOException {
        targetFolder = new File(destLocation);
        if (sourceLocation.isDirectory()) {
            if (!targetFolder.exists()) {
                targetFolder.mkdir();
            }

            String[] children = sourceLocation.list();
            for (int i = 0; i < children.length; i++) {
                copyDirectory(new File(sourceLocation, children[i]),
                        destLocation);

            }
        } else {

            InputStream in = new FileInputStream(sourceLocation);
            OutputStream out = new FileOutputStream(targetFolder + "\\"+ sourceLocation.getName(), true);
            System.out.println("Destination Path ::"+targetFolder + "\\"+ sourceLocation.getName());            
            // Copy the bits from instream to outstream
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
            noOfFiles++;
        }
    }

    public static void main(String[] args) throws IOException {

        File srcFolder = new File("C:\\sourceLocation\\");
        String destFolder = new String("C:\\targetLocation\\");
        CopyFiles cf = new CopyFiles();
        cf.copyDirectory(srcFolder, destFolder);
        System.out.println("No Of Files got Retrieved from Source ::"+cf.noOfFiles);
        System.out.println("Successfully Retrieved");
    }
}

0

এমনকি জটিল 7 এবং জাভা 7 তে কোনও আমদানির প্রয়োজন নেই:

renameTo( )পদ্ধতি একটি ফাইলের নাম পরিবর্তন:

public boolean renameTo( File destination)

উদাহরণস্বরূপ, src.txtবর্তমান ওয়ার্কিং ডিরেক্টরিতে ফাইলটির নাম পরিবর্তন করতে dst.txtআপনি লিখতে হবে:

File src = new File(" src.txt"); File dst = new File(" dst.txt"); src.renameTo( dst); 

এটাই.

রেফারেন্স:

হ্যারল্ড, এলিয়োট রাস্টি (2006-05-15)। জাভা I / O (পৃষ্ঠা 393)। ও'রিলি মিডিয়া। কিন্ডলে সংস্করণ.


2
চলাচল অনুলিপি করছে না।
নাথান টগি

এটি ফাইল সরানো হবে। ভুল উত্তর !
9:59 এ স্মাইলিফেস করুন

প্রশ্নের মন্তব্যে যেমন উল্লেখ করা হয়েছে, চলন্ত ওপিতে কাজ করবে।
মোহিত কানওয়ার

আপভোটেড, কারণ এটি আমার নিজের সমস্যার সাথে খাপ খায় এবং ফাইলগুলি সরিয়ে নেওয়ার পক্ষে সহজতম উত্তর এটি। ধন্যবাদ দোস্ত
লেভকাজ

দয়া করে প্রশ্নের সাথে সম্পর্কিত উত্তর দিন
শক্তিসিংহ জাদেজা

0

একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে ফাইল অনুলিপি করতে আপনি নীচের কোডটি ব্যবহার করতে পারেন

public static void copyFile(File sourceFile, File destFile) throws IOException {
        InputStream in = null;
        OutputStream out = null;
        try {
            in = new FileInputStream(sourceFile);
            out = new FileOutputStream(destFile);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = in.read(buffer)) > 0) {
                out.write(buffer, 0, length);
            }
        } catch(Exception e){
            e.printStackTrace();
        }
        finally {
            in.close();
            out.close();
        }
    }

0

রিকার্সিভ ফাংশন অনুসরণ করে আমি লিখেছি, যদি এটি কাউকে সহায়তা করে। এটি সোর্সডাইরেক্টরির ভিতরে থাকা সমস্ত ফাইলকে গন্তব্য ডিরেক্টরিতে অনুলিপি করবে।

উদাহরণ:

rfunction("D:/MyDirectory", "D:/MyDirectoryNew", "D:/MyDirectory");

public static void rfunction(String sourcePath, String destinationPath, String currentPath) {
    File file = new File(currentPath);
    FileInputStream fi = null;
    FileOutputStream fo = null;

    if (file.isDirectory()) {
        String[] fileFolderNamesArray = file.list();
        File folderDes = new File(destinationPath);
        if (!folderDes.exists()) {
            folderDes.mkdirs();
        }

        for (String fileFolderName : fileFolderNamesArray) {
            rfunction(sourcePath, destinationPath + "/" + fileFolderName, currentPath + "/" + fileFolderName);
        }
    } else {
        try {
            File destinationFile = new File(destinationPath);

            fi = new FileInputStream(file);
            fo = new FileOutputStream(destinationPath);
            byte[] buffer = new byte[1024];
            int ind = 0;
            while ((ind = fi.read(buffer))>0) {
                fo.write(buffer, 0, ind);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally {
            if (null != fi) {
                try {
                    fi.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (null != fo) {
                try {
                    fo.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

0

আপনি যদি বাহ্যিক লাইব্রেরি ব্যবহার করতে না চান এবং আপনি java.nio ক্লাসের পরিবর্তে java.io ব্যবহার করতে চান তবে আপনি একটি ফোল্ডার এবং এর সমস্ত সামগ্রী অনুলিপি করতে এই সংক্ষিপ্ত পদ্ধতিটি ব্যবহার করতে পারেন:

/**
 * Copies a folder and all its content to another folder. Do not include file separator at the end path of the folder destination.
 * @param folderToCopy The folder and it's content that will be copied
 * @param folderDestination The folder destination
 */
public static void copyFolder(File folderToCopy, File folderDestination) {
    if(!folderDestination.isDirectory() || !folderToCopy.isDirectory())
        throw new IllegalArgumentException("The folderToCopy and folderDestination must be directories");

    folderDestination.mkdirs();

    for(File fileToCopy : folderToCopy.listFiles()) {
        File copiedFile = new File(folderDestination + File.separator + fileToCopy.getName());

        try (FileInputStream fis = new FileInputStream(fileToCopy);
             FileOutputStream fos = new FileOutputStream(copiedFile)) {

            int read;
            byte[] buffer = new byte[512];

            while ((read = fis.read(buffer)) != -1) {
                fos.write(buffer, 0, read);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}

0

আমার জ্ঞান অনুসারে সেরা উপায়টি নিম্নরূপ:

    public static void main(String[] args) {

    String sourceFolder = "E:\\Source";
    String targetFolder = "E:\\Target";
    File sFile = new File(sourceFolder);
    File[] sourceFiles = sFile.listFiles();
    for (File fSource : sourceFiles) {
        File fTarget = new File(new File(targetFolder), fSource.getName());
        copyFileUsingStream(fSource, fTarget);
        deleteFiles(fSource);
    }
}

    private static void deleteFiles(File fSource) {
        if(fSource.exists()) {
            try {
                FileUtils.forceDelete(fSource);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void copyFileUsingStream(File source, File dest) {
        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream(source);
            os = new FileOutputStream(dest);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = is.read(buffer)) > 0) {
                os.write(buffer, 0, length);
            }
        } catch (Exception ex) {
            System.out.println("Unable to copy file:" + ex.getMessage());
        } finally {
            try {
                is.close();
                os.close();
            } catch (Exception ex) {
            }
        }
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.