Как необходимо изменить код так, чтобы можно было вводить несколько sourcePrefix?

123
09 июня 2019, 04:00

Есть файл s1, который нужно скопировать в s. Но как сделать так, чтобы можно было несколько файлов скопировать в один и как реализовать с помощью try-with-resourse?

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class Task2 {
    public Task2() {
    }
    static void unsplit (String sourcePrefix, String destination){
        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream(sourcePrefix);
            os = new FileOutputStream(destination);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = is.read(buffer)) > 0) {
                os.write(buffer, 0, length);
            }
            is.close();
            os.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        unsplit(
                "E:\\Java\\14 лабораторная\\src\\com\\example\\Lab14\\s1.txt",
                "E:\\Java\\14 лабораторная\\src\\com\\example\\Lab14\\s.txt"
        );
    }
}

Я попытался это сделать, но оно не хочет добавлять в public static void main новые sourcePrefix.

import java.io.*;
public class Task2 {
    public Task2() {
    }
    static void unsplit (String sourcePrefix, String destination){
        try {
            FileInputStream is_1 = new FileInputStream(sourcePrefix);
            FileInputStream is_2 = new FileInputStream(sourcePrefix);
            FileInputStream is_3 = new FileInputStream(sourcePrefix);
            FileOutputStream os = new FileOutputStream(destination);
            SequenceInputStream sis=new SequenceInputStream(is_1,is_2,is_3);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = sis.read(buffer)) > 0) {
                os.write(buffer, 0, length);
            }
            sis.close();
            is_1.close();
            is_2.close();
            is_3.close();
            os.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        unsplit(
                "E:\\Java\\14 лабораторная\\src\\com\\example\\Lab14\\s1.txt",
                "E:\\Java\\14 лабораторная\\src\\com\\example\\Lab14\\s.txt"
        );
    }
}
Answer 1

?

static void unsplit(String destination, String... sourcePrefix) {
    try (OutputStream os = new FileOutputStream(destination)) {
        for (String src : sourcePrefix) {
            try (InputStream is = new FileInputStream(src)) {
                byte[] buffer = new byte[1024];
                int length;
                while ((length = is.read(buffer)) > 0) {
                    os.write(buffer, 0, length);
                }
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
public static void main(String[] args) {
    unsplit(
            "E:\\Java\\14 лабораторная\\src\\com\\example\\Lab14\\s.txt",
            "E:\\Java\\14 лабораторная\\src\\com\\example\\Lab14\\s1.txt",
            "E:\\Java\\14 лабораторная\\src\\com\\example\\Lab14\\s2.txt"
    );
}

Сигнатура метода static void unsplit (String sourcePrefix, String destination) у вас не поменялась. И дополнительные аргументы добавлять некуда.

Для нескольких однотипных аргументов используется запись method(Class... args){}. Внутри метода переменная args будет массивом Class[] и содержать в массиве все аргументы, которые вы ввели. Обращаться к ним можно по индексу args[index] или с помощью итератора, как в коде выше.

READ ALSO
Сериализация объекта в Android

Сериализация объекта в Android

Пишу игру под AndroidСтоит задача каким-то образом хранить данные

125
return hTemp == ht2.hTemp;

return hTemp == ht2.hTemp;

Подскажите, что за такая конструкция == ht2hTemp ? Нигде не могу найти описание

135
Как запускать tomcat из под другого пользователя

Как запускать tomcat из под другого пользователя

https://andreyexru/ubuntu/ustanovit-tomcat-9-na-ubuntu-16-04-vps/

112
Нужно удалить из текущего файла пустые строчки из текста и записать его в новый файл на Java

Нужно удалить из текущего файла пустые строчки из текста и записать его в новый файл на Java

читаем файл, удаляем пустые строки, записываем то что осталось

99