Выбор файлов по маске. Проблема с русской кодировкой

Решил написать программу на Java, которая должна отбирать файлы по маске и копировать их в специальную папку(путь заранее известен). Однако столкнулся с трудностями.
Читаю файл, смотрю является ли он директорией, если да то начинаю смотреть его внутреннюю структуру, если нет, проверяю удовлетворяет ли он моей маске.
.indexOf — метод который проверяет входит ли маска в имя директории или файла.
Когда тестировал на каталогах с файлами и папками названными на английском языке — проблем не было, однако когда перешел на русские — возникли проблемы. Считывая название файла(на русском) компьютер выпадает что-то вроде:
«DirList=” Єг«мвҐв ЎЁ§­Ґб  Ё ¬Ґ­Ґ¤¦¬Ґ­в 
DirList=” Єг«мвҐв Јг¬ ­Ёв а­ле ­ гЄ
DirList=Programmnew
DirList=Њ®ЎЁ«м­®бвм а Ў®в­ЁЄ®ў
DirList=Њ®ЎЁ«м­®бвм бв㤥­в®ў»

Вопрос, как это можно решить?
  • ,

javarush.test.level19.lesson05.task02

Почему не проходит тестирование??? Может я условие не понял до конца?

Выводит все то что надо…

/* Считаем слово
Считать с консоли имя файла.
Вывести в консоль количество слов "world", которые встречаются в файле.
Закрыть поток ввода.
*/

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) throws IOException{
        Scanner sc =new Scanner(System.in);
        BufferedReader reader=new BufferedReader(new FileReader(sc.nextLine()));

        int count=0;
        String mas[];

        while (reader.ready()){
            String data=reader.readLine();
            data=data.toLowerCase();
            while (data.contains("world")) {
                int a=data.indexOf("world");
                data=data.substring(0,a)+data.substring(a+5,data.length());
                count++;
            }
        }

        System.out.println(count);

        reader.close();
        sc.close();
    }
}
  • ,

level19.lesson10.home01

Такая беда — что-то с кодировками.
При считывании кириллических символов из файла в программе они отображаются как ромбы с вопросами, то есть при содержимом файла
Петров 2
Сидоров 6
Иванов111 1.35
Петров 3.1

вывод получается в виде
������111 1.35
������ 5.1
������� 6.0

Если же убрать единички у Иванова так, что длина имени сравняется с Петровым
Петров 2
Сидоров 6
Иванов 1.35
Петров 3.1

получается вообще весело:
������� 6.0
������ 6.45

то есть программа воспринимает все кириллические символы как один и тот же знак.
Программа при этом не принимается. Код моего решения
package com.javarush.test.level19.lesson10.home01;

/* Считаем зарплаты
В метод main первым параметром приходит имя файла.
В этом файле каждая строка имеет следующий вид:
имя значение
где [имя] - String, [значение] - double. [имя] и [значение] разделены пробелом

Для каждого имени посчитать сумму всех его значений
Все данные вывести в консоль, предварительно отсортировав в возрастающем порядке по имени
Закрыть потоки

Пример входного файла:
Петров 2
Сидоров 6
Иванов 1.35
Петров 3.1

Пример вывода:
Иванов 1.35
Петров 5.1
Сидоров 6.0
*/


import java.io.*;
import java.util.HashMap;
import java.util.Map;


public class Solution {
    public static void main(String[] args) {
        Map<String, Double> employeeList = new HashMap<String, Double>();

        String fName = args[0];
        try
        {
            BufferedReader input = new BufferedReader(new FileReader(fName));

            while(input.ready()) {
                String[] dataLine = input.readLine().split(" ");
                String name = dataLine[0];
                double income = Double.parseDouble(dataLine[1]);
                if (!employeeList.containsKey(name))
                    employeeList.put(name, income);
                else {
                    double oldSum = employeeList.get(name);
                    employeeList.put(name, oldSum + income);
                }
            }

            while (!employeeList.isEmpty()) {
                double minSum = Double.MAX_VALUE;
                String minName = "";
                for (Map.Entry<String, Double> entry : employeeList.entrySet())
                {
                    if (entry.getValue() < minSum)
                    {
                        minSum = entry.getValue();
                        minName = entry.getKey();
                    }
                }

                System.out.println(minName + " " + minSum);
                employeeList.remove(minName);
            }

            input.close();

        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

    }
}


Умные люди, подскажите, пожалуйста, что я упустил из виду. Как поправить кодировку?
  • ,

level15.lesson12.home07 Файл в статическом блоке

Подскажите, пожалуйста, что не так: в IDEA все работает, выводит корректный ответ, а при проверке — «Ошибка! Программа не компилируется на сервере»


package com.javarush.test.level15.lesson12.home07;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/* Файл в статическом блоке
1. Инициализируй константу Constants.FILE_NAME полным путем к файлу с данными, который содержит несколько строк.
2. В статическом блоке считай из файла с именем Constants.FILE_NAME все строки и добавь их по-отдельности в List lines.
3. Закрой поток ввода методом close().
*/

public class Solution {
    public static List<String> lines = new ArrayList<String>();

    static {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(Constants.FILE_NAME)));

            while (true) {
                String s = reader.readLine();
                if (s == null)
                    break;
                lines.add(s);
            }
            reader.close();

        }
        catch (FileNotFoundException e) {}
        catch (IOException e) {}
    }

    public static void main(String[] args) {
        System.out.println(lines);
    }
}