package com.javarush.test.level18.lesson10.home06;

/* Встречаемость символов
Программа запускается с одним параметром - именем файла, который содержит английский текст.
Посчитать частоту встречания каждого символа.
Отсортировать результат по возрастанию кода ASCII (почитать в инете). Пример: ','=44, 's'=115, 't'=116
Вывести на консоль отсортированный результат:
[символ1]  частота1
[символ2]  частота2
Закрыть потоки

Пример вывода:
, 19
- 7
f 361
*/

import java.io.FileInputStream;
import java.io.IOException;

public class Solution {
    public static void main(String[] args) throws IOException{
        FileInputStream fileInputStream = new FileInputStream(args[0]);
        int[] frq = new int[128];  //массив частот


        while (fileInputStream.available() > 0) {
            int a = fileInputStream.read();
            frq[a]++;
        }
        fileInputStream.close();
        char j = 0;
        for (int i = 0; i < 128; i++) {

            if (frq[i] != 0) System.out.println(j + " " + frq[i]);
            j++;
        }
    }
}

package com.javarush.test.level18.lesson10.home10;

/* Собираем файл
Собираем файл из кусочков
Считывать с консоли имена файлов
Каждый файл имеет имя: [someName].partN. Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37.
Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end"
В папке, где находятся все прочтенные файлы, создать файл без приставки [.partN]. Например, Lion.avi
В него переписать все байты из файлов-частей используя буфер.
Файлы переписывать в строгой последовательности, сначала первую часть, потом вторую, ..., в конце - последнюю.
Закрыть все потоки ввода-вывода
Темповые файлы создавать нельзя, т.к. на сервере заблокирована возможность создания каких любо файлов
*/

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) throws IOException
    {
        Scanner scanner = new Scanner(System.in);
        ArrayList<String> parts = new ArrayList<String>();         
        FileInputStream fileInputStream = null;         
        String nextFileName = null;
        //Читаем файлы пока не "end"

        while (true) {
            if ("end".equals(nextFileName = scanner.nextLine())) break;
            else parts.add(nextFileName);
        }
        scanner.close();
        //Сортируем коллекцию

        Collections.sort(parts, new Comparator<String>()
        {
            @Override
            public int compare(String o1, String o2)
            {
                return o1.toString().compareTo(o2.toString());    
            }
        });
        //Выходной файловый поток

        String outputFileName = parts.get(0).split(".part")[0];
        FileOutputStream fileOutputStream = new FileOutputStream(outputFileName);
        //Сливаем файлы

        for (String partsFileNames : parts) {
            fileInputStream = new FileInputStream(partsFileNames);
            byte[] buffer = new byte[fileInputStream.available()];
            fileInputStream.read(buffer);
            fileOutputStream.write(buffer);
            fileInputStream.close();
        }
        fileOutputStream.close();
        System.out.println("Объединение файлов выполнено!");
    }
}
package com.javarush.test.level18.lesson10.bonus01;

/* Шифровка
Придумать механизм шифровки/дешифровки

Программа запускается с одним из следующих наборов параметров:
-e fileName fileOutputName
-d fileName fileOutputName
где
fileName - имя файла, который необходимо зашифровать/расшифровать
fileOutputName - имя файла, куда необходимо записать результат шифрования/дешифрования
-e - ключ указывает, что необходимо зашифровать данные
-d - ключ указывает, что необходимо расшифровать данные
*/

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

public class Solution {
    public static void main(String[] args) throws IOException{
        String key = args[0];
        String fileInputName = args[1];
        String fileOutputName = args[2];
        FileInputStream fileInputStream = new FileInputStream(fileInputName);
        FileOutputStream fileOutputStream = new FileOutputStream(fileOutputName);
        if ("-e".equals(key)) {
            while (fileInputStream.available() > 0) {
                int data = fileInputStream.read();
                if (data == 0xFF) data = 0x00;
                else data++;
                fileOutputStream.write(data);
            }
        }
        else if ("-d".equals(key)) {
            while (fileInputStream.available() > 0) {
                int data = fileInputStream.read();
                if (data == 0x00) data = 0xFF;
                else data--;
                fileOutputStream.write(data);
            }
        }
        fileInputStream.close();
        fileOutputStream.close();
        System.out.println("Выполнено!");
    }
}
package com.javarush.test.level18.lesson10.home09;

/* Файлы и исключения
Читайте с консоли имена файлов
Если файла не существует (передано неправильное имя файла), то
перехватить исключение, вывести в консоль переданное неправильное имя файла и завершить работу программы
Не забудьте закрыть все потоки
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) {
        BufferedReader rdr = new BufferedReader(new InputStreamReader(System.in));
        String f = "";
        while(true){
            try
            {
                try
                {
                    f = rdr.readLine();
                    File file = new File(f);
                    if (!file.exists()) throw new FileNotFoundException(f);
                }
                catch (FileNotFoundException e) {
                    System.out.println(f);
                    break;
                }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }
}
package com.javarush.test.level19.lesson03.task03;

/* Адаптация нескольких интерфейсов
Адаптировать IncomeData к Customer и Contact.
Классом-адаптером является IncomeDataAdapter.
Инициализируйте countries перед началом выполнения программы. Соответствие кода страны и названия:
UA Ukraine
RU Russia
CA Canada
Дополнить телефонный номер нулями до 10 цифр при необходимости
*/

import java.util.HashMap;
import java.util.Map;

public class Solution {
    public static Map<String,String> countries = new HashMap<String,String>();

    static {
        countries.put("UA", "Ukraine");
        countries.put("RU", "Russia");
        countries.put("CA", "Canada");
        countries.put("US", "United States");
    }

    public static class IncomeDataAdapter implements Customer, Contact{
        private IncomeData incomeData;

        public IncomeDataAdapter(IncomeData incomeData)
        {
            this.incomeData = incomeData;
        }

        @Override
        public String getName()
        {
            return this.incomeData.getContactLastName() + ", " + this.incomeData.getContactFirstName();
        }

        @Override
        public String getPhoneNumber()
        {
            String clearPhoneNumber = Integer.valueOf(this.incomeData.getPhoneNumber()).toString();
            if (clearPhoneNumber.length() < 10) {
                while (clearPhoneNumber.length() < 10) clearPhoneNumber = "0" + clearPhoneNumber;
            }
            String newPhoneName = "+"
                    + this.incomeData.getCountryPhoneCode() + "(" + clearPhoneNumber.substring(0, 3)
                    + ")" + clearPhoneNumber.substring(3, 6) + "-" + clearPhoneNumber.substring(6,8)
                    + "-" + clearPhoneNumber.substring(8);
            return newPhoneName;
        }

        @Override
        public String getCompanyName()
        {
            return this.incomeData.getCompany();
        }

        @Override
        public String getCountryName()
        {
            String countryName = "";
            for (Map.Entry<String, String> pair : countries.entrySet()){
                if (pair.getKey().equals(this.incomeData.getCountryCode())) countryName = pair.getValue();
            }
            return countryName;
        }
    }

    public static interface IncomeData {
        String getCountryCode();        //example UA

        String getCompany();            //example JavaRush Ltd.

        String getContactFirstName();   //example Ivan

        String getContactLastName();    //example Ivanov

        int getCountryPhoneCode();      //example 38

        int getPhoneNumber();           //example 501234567

    }

    public static interface Customer {
        String getCompanyName();        //example JavaRush Ltd.

        String getCountryName();        //example Ukraine

    }

    public static interface Contact {
        String getName();               //example Ivanov, Ivan

        String getPhoneNumber();        //example +38(050)123-45-67

    }

    //Тестовый main

    public static void main(String[] args)
    {
        class iData implements IncomeData {

            @Override
            public String getCountryCode()
            {
                return "US";
            }

            @Override
            public String getCompany()
            {
                return "Planet Express";
            }

            @Override
            public String getContactFirstName()
            {
                return "Bender";
            }

            @Override
            public String getContactLastName()
            {
                return "Rodriguez";
            }

            @Override
            public int getCountryPhoneCode()
            {
                return 1;
            }

            @Override
            public int getPhoneNumber()
            {
                return 666666;
            }
        }
        IncomeDataAdapter adapter = new IncomeDataAdapter(new iData());
        System.out.println(adapter.getCompanyName());
        System.out.println(adapter.getCountryName());
        System.out.println(adapter.getPhoneNumber());
        System.out.println(adapter.getName());
    }
}

Reincarnation

reincarnation