powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Чтение файлов с кириличным именем
12 сообщений из 12, страница 1 из 1
Чтение файлов с кириличным именем
    #39813312
Виктория_00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
есть метод, который должен считать файлы с диска (jpg, jpeg || png), и переписать их в другое место изменив размер
сам метод:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    static File[] tempBuilder(ArrayList<String> files) {
        File[] f = new File[files.size()];
        for(int i = 0; i < files.size(); i++){
            File ft = new File("res\\temp\\" + getTempId() + ".jpg");
            try {
                BufferedImage image = ImageIO.read(new File(files.get(i)));
                BufferedImage resImage = resize(image,100,100);
                ImageIO.write(resImage, "jpg", ft);
                f[i] = ft;
            } catch (IOException ex) {
                Logger.getLogger(Out.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return f;
    }


метод resize
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    public static BufferedImage resize(BufferedImage img, int newW, int newH) { 
        Image tmp = img.getScaledInstance(newW, newH, Image.SCALE_SMOOTH);
        BufferedImage dimg = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_RGB);
 
        Graphics2D g2d = dimg.createGraphics();
        g2d.drawImage(tmp, 0, 0, null);
        g2d.dispose();
 
        return dimg;
    }


виборка файлов с диска
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
                File[] item = new File(dir).listFiles();
                ArrayList<String> dirs = new ArrayList<String>();
                ArrayList<String> files = new ArrayList<String>();
                ArrayList<String> filesPath = new ArrayList<String>();
                for(int i = 0; i < item.length; i++){
                    if(item[i].isDirectory()){
                        dirs.add(item[i].getName());
                    }
                    else{
                        String s = item[i].getName();
                        int tach = s.lastIndexOf(".");
                        String roz = s.substring(tach + 1);
                        if((roz.equals("jpg") || roz.equals("jpeg") || roz.equals("png")) /*&& s.indexOf("-") == -1// сия часть была добавлена
                                мной как костыль, ибо раньше висло все на первом же файле с дефисом, теперь виснет только на файлах с 
                                кириличным именем, а файлы с дефисом не попадают в обработку, что тоже по-сути не правильно*/){
                            files.add(item[i].getName());
                            filesPath.add(item[i].getAbsolutePath());
                        }
                    }
                }


Когда цикл доходит до кирилически-обозваного файла строка g2d.drawImage(tmp, 0, 0, null); виснет, и дебагер дальше не проваливается.
Может кто знает как исправить сие положение?
Спасибо
throw new AchtungProgramistGirlException(true);
...
Рейтинг: 0 / 0
Чтение файлов с кириличным именем
    #39813364
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
try {
  ...
} catch (AchtungProgramistGirlException ex){
   Logger.getLogger("Don't use cyrillic symbols in filenames!");
}
...
Рейтинг: 0 / 0
Чтение файлов с кириличным именем
    #39813366
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если серьезно, то по идее должно валиться на
Код: java
1.
BufferedImage image = ImageIO.read(new File(files.get(i)));



Вы точно уверены, что виснет именно на
Код: java
1.
g2d.drawImage(tmp, 0, 0, null);


?
...
Рейтинг: 0 / 0
Чтение файлов с кириличным именем
    #39813378
Виктория_00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точно, пять раз дебагером уже проганяла, все время там валится. считку файта проходит
...
Рейтинг: 0 / 0
Чтение файлов с кириличным именем
    #39813385
Виктория_00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если избавится от киличных файлов
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
File[] item = new File(dir).listFiles();
                ArrayList<String> dirs = new ArrayList<String>();
                ArrayList<String> files = new ArrayList<String>();
                ArrayList<String> filesPath = new ArrayList<String>();
                for(int i = 0; i < item.length; i++){
                    if(item[i].isDirectory()){
                        dirs.add(item[i].getName());
                    }
                    else{
                        String s = item[i].getName();
                        int tach = s.lastIndexOf(".");
                        String roz = s.substring(tach + 1);
                        Pattern ptr = Pattern.compile("[а-яА-Я]");
                        if((roz.equals("jpg") || roz.equals("jpeg") || roz.equals("png")) && s.indexOf("-") == -1){
                            Matcher m = ptr.matcher(s);
                            if(!m.find()){
                                files.add(item[i].getName());
                                filesPath.add(item[i].getAbsolutePath());
                            }
                        }
                    }
                }


все прекрасно работает
[img=]
...
Рейтинг: 0 / 0
Чтение файлов с кириличным именем
    #39813408
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На флешках отформатированных под FAT32 могут быть проблемы с представлением кодовой страницы.

По тексту кода и по вашим сообщениям так и не ясно точно где это.

Замените

Код: java
1.
BufferedImage image = ImageIO.read(new File(files.get(i)));



на

Код: java
1.
2.
InputStream inputStream = new FileInputStream("res\\temp\\" + getTempId() + ".jpg");
IOUtils.copy(inputStream, new NullOutputStream);



и два брейк поинта на каждую строку.
...
Рейтинг: 0 / 0
Чтение файлов с кириличным именем
    #39813414
Виктория_00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, попробую
...
Рейтинг: 0 / 0
Чтение файлов с кириличным именем
    #39813419
Виктория_00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЗамените

BufferedImage image = ImageIO.read(new File(files.get(i)));


на

InputStream inputStream = new FileInputStream("res\\temp\\" + getTempId() + ".jpg");
IOUtils.copy(inputStream, new NullOutputStream);

Шото тут не то.
Код: java
1.
BufferedImage image = ImageIO.read(new File(files.get(i)));


Считывает файл (!уже существующий) из листа путей.
Код: java
1.
FileInputStream("res\\temp\\" + getTempId() + ".jpg");


а ви предлагаете стриму считать файл, которого еще нет, ибо метод getTempId() генерирует новое имя (это раз), а каталог res\\temp\\ является целевым, в который будет произведена запись файла, и значит по умолчание такого файла там быть просто не может, физически (это двас).
ПС. :(
...
Рейтинг: 0 / 0
Чтение файлов с кириличным именем
    #39813428
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я хочу увидеть IOException с поясняющим текстом в фазе конструктора FileInputStream.
Предположительно там оно и падает.

Сделайте любезность. Кстати стектрейс ошибки здесь важнее всего. Странно что вы его не показали.
...
Рейтинг: 0 / 0
Чтение файлов с кириличным именем
    #39813459
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скопировал код - все работает, картинка создается
java 1.8

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.awt.Graphics2D;
import java.awt.Image;

public BufferedImage resize(BufferedImage img, int newW, int newH) { 
    Image tmp = img.getScaledInstance(newW, newH, Image.SCALE_SMOOTH);
    BufferedImage dimg = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = dimg.createGraphics();
    g2d.drawImage(tmp, 0, 0, null);
    g2d.dispose();
    return dimg;
}


BufferedImage image = ImageIO.read(new File("Привіт.jpg"));
BufferedImage resImage = resize(image,100,100);
ImageIO.write(resImage, "jpg", new File("Пaпа.jpg"));
...
Рейтинг: 0 / 0
Чтение файлов с кириличным именем
    #39813478
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дьявол - в деталях.
...
Рейтинг: 0 / 0
Чтение файлов с кириличным именем
    #39813705
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктория_00Здравствуйте
Ну привет.

В общем файлы читаются осью в дефолтной кодировке, дефолт определяет сама ось, каков он - надо выяснить. Но даже не суть с дефолтом, суть в отсутствии простейшей проверки.

Кто мешает в том же дебаггере посмотреть, что за хрень там суётся в конструктор нового файла?

Кроме того, давать конструктору просто имя файла, без пути - это действительно женская логика.

В общем - по замечаниям треба отчёт дать.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Чтение файлов с кириличным именем
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]