বাইট [] জাভাতে ফাইল করতে


327

জাভা সহ:

আমার কাছে একটি রয়েছে byte[]যা একটি ফাইল উপস্থাপন করে।

আমি কীভাবে এটি কোনও ফাইলে লিখি (যেমন C:\myfile.pdf)

আমি জানি এটি ইনপুটস্ট্রিম দিয়ে সম্পন্ন হয়েছে, তবে আমি এটি কার্যকর করে দেখছি না।

উত্তর:


502

অ্যাপাচি কমন্স আইও ব্যবহার করুন

FileUtils.writeByteArrayToFile(new File("pathname"), myByteArray)

অথবা, যদি আপনি নিজের জন্য কাজ করার জন্য জেদ করেন ...

try (FileOutputStream fos = new FileOutputStream("pathname")) {
   fos.write(myByteArray);
   //fos.close(); There is no more need for this line since you had created the instance of "fos" inside the try. And this will automatically close the OutputStream
}

28
@R। বেমরোজ ওয়েল, এটি সম্ভবত দু: খজনক ক্ষেত্রে সম্পদ পরিষ্কার করতে পরিচালিত করে।
টম হাটিন - ২১ শে

1
দস্তাবেজ থেকে: দ্রষ্টব্য: v1.3 হিসাবে, ফাইলের পিতামত ডিরেক্টরিগুলি উপস্থিত না থাকলে তৈরি করা হবে।
bmargulies

24
যদি লেখা ব্যর্থ হয় তবে আপনি আউটপুট স্ট্রিম ফাঁস করবেন। try {} finally {}যথাযথ সংস্থান পরিষ্কার করার জন্য আপনার সর্বদা ব্যবহার করা উচিত ।
স্টিভেন শ্লানস্কার

3
fos.close () বিবৃতিটি অপ্রয়োজনীয় যেহেতু আপনি চেষ্টা-সহ-সংস্থান ব্যবহার করছেন যা লিখিতভাবে ব্যর্থ হয়েও স্বয়ংক্রিয়ভাবে স্ট্রিমটি বন্ধ করে দেয়।
তিহোমির মেইইইইইইইইইইইইইইইইইইইইইইইকে

4
নিয়মিত জাভা সহ 2 টি লাইন হলে আমি কেন
আপাচি

185

কোনও গ্রন্থাগার ছাড়া:

try (FileOutputStream stream = new FileOutputStream(path)) {
    stream.write(bytes);
}

সঙ্গে গুগল পেয়ারা :

Files.write(bytes, new File(path));

সঙ্গে এ্যাপাচি কমন্স :

FileUtils.writeByteArrayToFile(new File(path), bytes);

এই সমস্ত কৌশলগুলির জন্য আপনাকে কোনও সময়ে আইওএক্সেপশনও ধরা দরকার।


118

আরও একটি সমাধান ব্যবহার করে java.nio.file:

byte[] bytes = ...;
Path path = Paths.get("C:\\myfile.pdf");
Files.write(path, bytes);

1
কেবলমাত্র Andorid O (8.0) +
কঙ্গারে

2
আমি মনে করি না যে C:\myfile.pdfযাইহোক অ্যান্ড্রয়েডে কাজ করবে ...;)
টিবিয়েনিক

37

জাভা 7-এর পর থেকে, java.nio.file.Files এর সাথে একটি লাইন:

Files.write(new File(filePath).toPath(), data);

যেখানে ডেটা হল আপনার বাইট [] এবং ফাইলপথ একটি স্ট্রিং। আপনি স্ট্যান্ডার্ড ওপেনঅ্যাপশন ক্লাসের সাথে একাধিক ফাইল ওপেন বিকল্পগুলিও যুক্ত করতে পারেন। চেষ্টা / ধরা দিয়ে নিক্ষেপ বা চারপাশে যুক্ত করুন।


6
আপনি এর Paths.get(filePath);পরিবর্তেnew File(filePath).toPath()
টিম বাথ

@ হালিল আমি ঠিক মনে করি না। জাভাডোকদের মতে খোলা বিকল্পগুলির জন্য একটি 3rdচ্ছিক তৃতীয় যুক্তি রয়েছে এবং "যদি কোনও বিকল্প উপস্থিত না থাকে তবে এই পদ্ধতিটি এমনভাবে কাজ করে যা ক্রিট, ট্রুনসিএক্সএক্সিং এবং রাইটিং অপশন উপস্থিত থাকে। অন্য কথায়, এটি লেখার জন্য ফাইলটি খোলায়, তৈরি করে ফাইল যদি এটি বিদ্যমান না থাকে, বা প্রাথমিকভাবে একটি নিয়মিত-ফাইলটি 0 আকারের আকারে কাটা হয় file "
কেভিন স্যাডলার

19

থেকে জাভা 7 অনওয়ার্ড আপনি ব্যবহার করতে পারেন ব্যবহার করে দেখুন-সঙ্গে-সম্পদ সম্পদ লিক এড়াতে এবং আপনার কোড সহজ পাঠযোগ্য করতে বিবৃতি। আরো বিষয়ে এখানে

byteArrayএকটি ফাইল আপনার লিখতে আপনি করতে হবে:

try (FileOutputStream fos = new FileOutputStream("fullPathToFile")) {
    fos.write(byteArray);
} catch (IOException ioe) {
    ioe.printStackTrace();
}

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



1
File f = new File(fileName);    
byte[] fileContent = msg.getByteSequenceContent();    

Path path = Paths.get(f.getAbsolutePath());
try {
    Files.write(path, fileContent);
} catch (IOException ex) {
    Logger.getLogger(Agent2.class.getName()).log(Level.SEVERE, null, ex);
}

1

/////////////////////////// 1] ফাইল টু বাইট [] /////////////////// //

Path path = Paths.get(p);
                    byte[] data = null;                         
                    try {
                        data = Files.readAllBytes(path);
                    } catch (IOException ex) {
                        Logger.getLogger(Agent1.class.getName()).log(Level.SEVERE, null, ex);
                    }

///////////////////////// 2] বাইট [] থেকে ফাইল ////////////////////// ///////

 File f = new File(fileName);
 byte[] fileContent = msg.getByteSequenceContent();
Path path = Paths.get(f.getAbsolutePath());
                            try {
                                Files.write(path, fileContent);
                            } catch (IOException ex) {
                                Logger.getLogger(Agent2.class.getName()).log(Level.SEVERE, null, ex);
                            }

উত্তরের জন্য ধন্যবাদ..কিন্তু "ফাইলনাম" সম্পর্কিত আমার কি বিভ্রান্তি আছে, মানে আপনি ডেটা সংরক্ষণ করছেন এমন ফাইলটি কী? আপনি দয়া করে ব্যাখ্যা করতে পারেন?
এসআরএম

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

0

প্রাথমিক উদাহরণ:

String fileName = "file.test";

BufferedOutputStream bs = null;

try {

    FileOutputStream fs = new FileOutputStream(new File(fileName));
    bs = new BufferedOutputStream(fs);
    bs.write(byte_array);
    bs.close();
    bs = null;

} catch (Exception e) {
    e.printStackTrace()
}

if (bs != null) try { bs.close(); } catch (Exception e) {}

0

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

` এখানে কোড লিখুন

import java.io.File;   
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;        

//*This is a program where we are reading and printing array of bytes offset and length using StringBuilder and Writing the array of bytes offset length to the new file*//     

public class ReadandWriteAByte {
    public void readandWriteBytesToFile(){
        File file = new File("count.char"); //(abcdefghijk)
        File bfile = new File("bytefile.txt");//(New File)
        byte[] b;
        FileInputStream fis = null;              
        FileOutputStream fos = null;          

        try{               
            fis = new FileInputStream (file);           
            fos = new FileOutputStream (bfile);             
            b = new byte [1024];              
            int i;              
            StringBuilder sb = new StringBuilder();

            while ((i = fis.read(b))!=-1){                  
                sb.append(new String(b,5,5));               
                fos.write(b, 2, 5);               
            }               

            System.out.println(sb.toString());               
        }catch (IOException e) {                    
            e.printStackTrace();                
        }finally {               
            try {              
                if(fis != null);           
                    fis.close();    //This helps to close the stream          
            }catch (IOException e){           
                e.printStackTrace();              
            }            
        }               
    }               

    public static void main (String args[]){              
        ReadandWriteAByte rb = new ReadandWriteAByte();              
        rb.readandWriteBytesToFile();              
    }                 
}                

কনসোলে ও / পি: fghij

ও / পি নতুন ফাইলে: সিডিএফজি


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.