Как я могу скопировать файлы png? и динамический путь к каталогу

Поэтому я написал этот код, который копирует файл из папки в другую! он отлично работает с файлами .mp3 .wav .jpeg.jpg

но он не работает должным образом с файлами .png! (изображение уничтожено или отсутствует его половина)

Есть ли способ отредактировать код, работает ли он с файлами .png? если нет, то как я могу их скопировать?

Я также хочу добавить еще один вопрос! текущий код работает на моем компьютере, потому что этот путь D:\\move\\1\\1.mp3 существует на моем компьютере!

если я преобразовываю свою программу в файл .exe и отдаю ее кому-то другому, она не работает, потому что этого пути не существует на его компьютере! поэтому вместо этой строки

    FileInputStream up = new FileInputStream("D:\\move\\1\\images\\1.jpg");

я хочу сделать что-то вроде

    FileInputStream up = new FileInputStream(findAppFolder+"\\images\\1.jpg");

код :

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Main {

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

        FileInputStream up = new FileInputStream("D:\\move\\1\\images\\1.jpg");
        FileOutputStream down = new FileOutputStream("D:\\move\\2\\images\\2.jpg");
        BufferedInputStream ctrl_c = new BufferedInputStream(up);
        BufferedOutputStream ctrl_v = new BufferedOutputStream(down);
        int b=0;
        while(b!=-1){
            b=ctrl_c.read();
            ctrl_v.write(b);
        }
        ctrl_c.close();
        ctrl_v.close();
    }

}

person Dhia Djobbi    schedule 28.04.2020    source источник
comment
Я не совсем уверен, решит ли это проблему, но вы, возможно, могли бы попробовать использовать классы Path и Files (из нового пакета java.nio) для копирования файлов вместо простых потоков.   -  person Amongalen    schedule 28.04.2020
comment
..и я не могу воспроизвести - png копируется приведенным выше кодом без проблем   -  person xerx593    schedule 28.04.2020


Ответы (1)


Попробуйте так:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

Path source=Paths.get("abc.png");
Path destination=Paths.get("abcNew.png");
Files.copy(source, destination);

Или, если вы хотите использовать с вводом/выводом Java, попробуйте этот способ:

public void copy(File src, File dst) throws IOException {
    InputStream in = new FileInputStream(src);
    OutputStream out = new FileOutputStream(dst);

    // Transfer all byte from in to out
    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
        out.write(buf, 0, len);
    }
    in.close();
    out.close();
}
person Samim Hakimi    schedule 28.04.2020
comment
Я пытался использовать ваш код пути, но он не работает. он не может разрешить копию символа - person Dhia Djobbi; 28.04.2020
comment
Вы пытались «обновить» свой проект, а затем «очистить»? Если это не сработало, попробуйте также обновить IDE. - person Samim Hakimi; 28.04.2020
comment
Да, я пробовал оба ваших решения, и ни одно из них не работает. - person Dhia Djobbi; 28.04.2020
comment
Попробуйте импортировать: import java.nio.file.*; надеюсь, это сработает - person Samim Hakimi; 28.04.2020
comment
ofc я его импортирую.. Думаю проблема в коде, а не в IDE или пространствах имён.. - person Dhia Djobbi; 28.04.2020