Как отправить email из программы Java
[cc lang=»java»] import javax.mail.*; import javax.mail.internet.*; import java.util.Properties; public class test { public static void main(String[] args) { //Отправить E-Mail //Скачать javamail api (javax.mail.jar) отсюда http://www.oracle.com/technetwork/java/javamail/index.html //В Intellij IDEA в меню File->Project Structure…->Libraries нажать плюсик и добавить этот файл к проекту //Тто же самое сделать для JAF (activation.jar): http://www.oracle.com/technetwork/java/javase/jaf-136260.html //Если что-нибудь не получается, возможно сам почтовик блокирует авторизацию через ненадёжные приложения. (так по-умалчанию делает gmail.com и это отключается в личном кабинета) final String username = «SOURCE@mail.ru»; final String password = «SOURCE_PASSWORD»; Properties props = new Properties(); props.put(«mail.smtp.auth», «true»); props.put(«mail.smtp.starttls.enable», «true»); props.put(«mail.smtp.host», «smtp.mail.ru»); props.put(«mail.smtp.port», «587»); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(«SOURCE@mail.ru»)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(«TARGET@mail.ru»)); message.setSubject(«Testing Subject»); message.setText(«Dear Mail Crawler,» + «\n\n No spam to my email, please!»); Transport.send(message); System.out.println(«Done»); } catch (MessagingException e) { throw new RuntimeException(e); } } }[/cc] P.S.: Нужные…
Как отсортировать список строк в обратном алфавитном порядке
[cc lang=»java»]import java.util.Arrays; import java.util.Comparator; public class test { static class MyComparator implements Comparator { public int compare(String strA, String strB) { return strB.compareTo(strA); } } public static void main(String[] args) { String[] mass = new String[]{«hello», «world», «any_shit», «my_word»}; MyComparator rsc = new MyComparator(); Arrays.sort(mass, rsc); System.out.println(Arrays.toString(mass)); } }[/cc]
Правила сериализации
При сериализации автоматически не сериализуются: — transient переменные — static переменные — унаследованные переменные (они будут инициализированы с помощью конструктора родительского класса без параметров). Все это можно разными способами сериализовать врукопашную (externalizable). Для сериализации объектов внутренних нестатических классов, внешние классы должны быть сериализуемыми. Да, чтобы немного дополнить алгоритм стандартной сериализации/десериализации, используют два метода: [cc lang=»java»] public class B extends A implements Serializable { private String nameB; private void writeObject(ObjectOutputStream oos) throws Exception{ oos.defaultWriteObject(); oos.writeObject(nameA); } private void readObject(ObjectInputStream ois) throws Exception{ ois.defaultReadObject(); nameA = (String) ois.readObject(); } public B(String nameA, String nameB) { super(nameA); this.nameA += nameA; this.nameB = nameB; } } [/cc]
Получить имя пакета класса
[cc lang=»java»] MyClass.class.getPackage().getName() [/cc]
Получение всех методов класса и их выполнение
[cc lang=»java»] Class c = person.getClass(); Method[] methods = c.getDeclaredMethods(); //Получаем массив объявленных методов класса person try { methods[0].invoke(person, null); //Выполняем первый попавшийся метод } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } [/cc] Более подробно расписано здесь (http://java-online.ru/java-reflection.xhtml). Вызов метода с параметрами: [cc lang=»java»] Class aclass = obj.getClass(); Class[] paramTypes = new Class[] { String.class, int.class }; Method method = aclass.getMethod(«getCalculateRating», paramTypes); Object[] args = new Object[] { new String(«First Calculate»), new Integer(10) }; Double d = (Double) method.invoke(obj, args); [/cc] Метод invoke принимает два параметра : первый — это объект, класс которого объявляет или наследует данный метод, а второй — массив значений параметров, которые передаются вызываемому методу.
Создание объекта класса по его имени
В общем виде это выглядет так (http://java-online.ru/java-reflection.xhtml): [cc lang=»java»] Class aclass = Class.forName(«Test»); Object obj = aclass.newInstance(); Test test = (Test) obj; [/cc] Пример: файл Person.java с объявлением интерфейса, в котором содержатся классы: [cc lang=»java»] package com.javarush.task.task14.task1411; public interface Person { class User implements Person { void foo() { System.out.println(«Something»); } } class Coder implements Person { void foo() { System.out.println(«Something»); } } } [/cc] фрагмент файла Solution.java, находящийся в том же пакете: [cc lang=»java»] try{ Class c = Class.forName(«com.javarush.task.task14.task1411.Person$User»); Person person = (Person)c.newInstance(); } catch (Exception | NoClassDefFoundError e){ System.out.println(e); } [/cc] Замечу, что если в строке 2 вместо $User будет $user (ошибка в регистре), то будет брошен NoClassDefFoundError.
Материалы по рефлексии
http://java-online.ru/java-reflection.xhtml
Несколько типов исключений в одном блоке Catch
[cc lang=»java»] try{ ///Something } catch (Exception | NoClassDefFoundError e){ System.out.println(e); } [/cc] Здесь в одном блоке Catch мы отлавливаем исключения двух типов. Замечу, что NoClassDefFoundError не является наследником класса Exception.
Изменение регистра. Сделать первую букву строки заглавной.
[cc lang=»java»] public static String firstUpperCase(String string){ if (string == null || string.isEmpty()) return «»; return string.substring(0, 1).toUpperCase() + string.substring(1).toLowerCase(); } [/cc]
pfSense — Решение проблем
Второй раз встречаюсь с ситуацией, решил написать здесь. Симптомы: Не прикрепляются файлы к письмам на Яндекс почте На некоторых компьютерах очень тугой интернет, не открываются некоторые файлы. Причём на других компьютерах может быть нормально. Перед этим: Аварийное отключение питания компьютера с pfSense Web-интерфейс pfSense: Disk usage: / (ufs): 100% of 70G Решение: Заходим в Web-интерфейс pfSense -> Status -> Services Останавливаем Squid Подключаемся к pfSense при помощи Putty Очищаем файлы кэша: rm -fr /var/squid/cache/* Создаём новый кэш: squid -z Запускаем Squid