简体   繁体   中英

How to write a list of files in Java

I have a class in Java which write a file using FileOutputStream and BufferedOutputStream. This is working fine but my intention is that I want to write any number of files in java not just one. Here is my code written in Java

public class FileToBeTaken{


 public void fileBack(byte [] output) {

     FileOutputStream fop = null;
     BufferedOutputStream bos = null;
        File file;


        try {       
            file= new File("/Users/user/Desktop/newfile.txt");

            fop = new FileOutputStream(file);

            bos = new BufferedOutputStream(fop);

            // if file doesnt exists, then create it
            if (!file.exists()) {
                file.createNewFile();
            }



            bos.write(output);
            bos.flush();
            bos.close();

            System.out.println("Done");

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bos != null) {
                    bos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

Here fileBack method is called from another class inside a for loop n times. so for each time I need to write a new file onto my desktop as my code is I just take only the file for the last iteration. Also I should mention that for each iteration as parameter to this class is send one array of bytes which is taken by "byte [] output

Change public void fileBack(byte [] output) {

to

public void fileBack(String fileName, byte [] output) {

Then change where you call method fileBack in your other class by providing the file name there. ie

byte output[] = //You already provide this byte array

String fileName = "/Users/user/Desktop/newfile.txt"

fileBack(fileName, output);

Try taking in the file path ..newfile.txt and making it into a parameter for the function. Then you can put a for loop in main or whoever is instantiating this object and call it n times. Does that help at all?

just add one static and private integer field inside FileToBeTaken class.

private static int index=0;

so there is no need to pass name of file to this class as you mentioned in question comments.

because i want to create these file names inside this class i wrote above

then use it in fileBack method and each time incremet it once in that method.
here is the changes on your code:

public class FileToBeTaken {

    // index or number of new file, also number of all written files
    // because it increments each time you call fileBack method.
    private static int index = 0;

    public void fileBack(byte[] output) {

        FileOutputStream fop = null;
        BufferedOutputStream bos = null;
        File file;

        try {

            // use user_dir to place files on desktop, 
            // even on other machines which have other names except user.
            String user_dir = System.getProperty("user.home").replace("\\", "/");

            // use index to create name of file.
            file = new File(user_dir+"/Desktop/newfile_" + (index++) + ".txt");

            fop = new FileOutputStream(file);
            bos = new BufferedOutputStream(fop);

            // if file doesnt exists, then create it
            if (!file.exists()) {
                file.createNewFile();
            }

            bos.write(output);
            bos.flush();
            bos.close();

            System.out.println("Done - "+file.getName());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bos != null) {
                    bos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}    

how to use it:

for (int i = 0; i < 10; i++) {
    new FileToBeTaken().fileBack("some text".getBytes());
}

the output:

Done - newfile_0.txt
Done - newfile_1.txt
Done - newfile_2.txt
Done - newfile_3.txt
Done - newfile_4.txt
Done - newfile_5.txt
Done - newfile_6.txt
Done - newfile_7.txt
Done - newfile_8.txt
Done - newfile_9.txt

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM