31 Aralık 2016 Cumartesi

LocalDateTime Sınıfı

Giriş
Bu sınıf tarih ve saati bilir. Diğer sınıflar ile ilişkisi şöyledir. Bu sınıf sistem saatinin çözünürlüğü kadar çözünürlük sağlar.

Açıklaması şöyle
LocalDateTime is date-time without a time-zone in the ISO-8601 calendar system, such as 2007-12-03T10:15:30

atZone metodu
Yerel tarih ve saati, bir başka saat dilimine çevirir.  Şöyle yaparız.
LocalDateTime ldt = ...;
ZoneId     zoneID = ...;
ZonedDateTime zdt = ldt.atZone (zoneId);
format metodu
Şöyle yaparız.
LocalDateTime ldt = LocalDateTime.now();
System.out.println (now.format());
Çıktı olarak şunu alırız. Saniye'ye kadar çözünürlük verir. Milisaniyeyi vermez.
2016-11-16 04:20:75
format metodu - DateTimeFormatter
Şöyle yaparız.
DateTimeFormatter formatter =
    DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS");

System.out.println(ldt.format(formatter));
Çıktı olarak şunu alırız.
2016-08-12T09:38:12.123456789
getDayOfMonth metodu
Şöyle yaparız.
ldt.getDayOfMonth();
getHour metodu
Şöyle yaparız.
ldt.getHour();
getMinute metodu
Şöyle yaparız.
ldt.getMinute();
getMonthValue metodu
Şöyle yaparız.
ldt.getMonthValue();
getSecond metodu
Şöyle yaparız.
ldt.getSecond ();
getYear metodu
Şöyle yaparız.
ldt.getYear();
minusDays metodu
Şöyle yaparız.
LocalDateTime ldt = LocalDateTime.now().minusDays(30);
now metodu
Şöyle yaparız.
LocalDateTime ldt = LocalDateTime.now();
now metodu - clock
Şöyle yaparız.
Clock clock = ...;

LocalDateTime ldt = 
  LocalDateTime.now(clock); // Instead of just LocalDateTime.now()
of metodu
Şöyle yaparız.
LocalDateTime when =
    LocalDateTime.of(2016, Month.AUGUST, 12, 9, 38, 12, 123456789);
Eğer yazdırırsak nanosaniye çözünürlüğünde veri saklayabildiğimiz görürüz. Şöyle yaparız.
System.out.println(when);
Çıktı olarak şunu alırız.
2016-08-12T09:38:12.123456789
ofInstant metodu - Instant
Şöyle yaparız.
Calendar cal = Calendar.getInstance();
LocalDateTime ldt = LocalDateTime.ofInstant (cal.toInstant(), 
                                            ZoneId.systemDefault());
Şöyle yaparız.
Date date = ...;
long timestamp = date.getTime();

LocalDateTime ldt = LocalDateTime.ofInstant (Instant.ofEpochMilli(timestamp),
            ZoneId.systemDefault());
parse metodu
Şöyle yaparız.
LocalDateTime ldt = LocalDateTime.parse ("2016-04-04T08:00" );
toString metodu
Açıklaması şöyle
The format used will be the shortest that outputs the full value of the time where the omitted parts are implied to be zero.
Çıktı olarak şunu alırız. Sistem saati genellikle milisaniye çözünürlüğünde olduğu için çıktı da bu çözünürlüktedir.
2016-08-11T22:17:35.031


30 Aralık 2016 Cuma

URL Sınıfı

URL Sınıfı
Şu satırı dahil ederiz.
import java.net.URL;
Bu sınıfı kullanmak URLConnection veya HttpURLConnection sınıfını kullanmaktan daha kolay.

URL şu kısımlardan oluşur.
scheme:[//host[:port]][/]path[?query][#fragment]
Bir URL'nin location kısmı büyük küçük harf farkından etkilenmez, ancak data kısmı etkilenebilir.
 scheme:[//host[:port]][/]path[?query][#fragment]
 \____________________/\________________________/
        Location                 Data
Biraz daha kolay anlaşılır bir gösterim şöyle
   foo://example.com:8042/over/there?name=ferret#nose
    \_/   \______________/\_________/ \_________/ \__/
     |           |            |            |        |
  scheme     authority       path        query   fragment
path alanından sonra gelen parametreler ? karakteri ile başlar. Şu url doğru olan
http://192.168.2.33:554?user=admin&password=&channel=2&stream=1.sdp
Ancak bir çok tarayıcı ? karakterinin önünne / karakterini ekliyor. Niçin bilmiyorum
http://192.168.2.33:554/?user=admin&password=&channel=2&stream=1.sdp
Constructror
Şöyle yaparız.
URL url = new URL("http://my.real.url.com/");
Bu metod exception atabilir.
try {
  URL url  = new URL("https://...");
} catch (MalformedURLException e) {
  ...
}
openConnection metodu - Proxy 
Proxy nesnesi şöyle oluşturulur.
InetSocketAddress proxyLocation = new InetSocketAddress(proxyHost, proxyPort);
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
Ya da şöyle oluşturulur.
SocketAddress addr = new InetSocketAddress("my.proxy.com", 8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
Daha sonra bir bağlantı açarız. Bu metod hemen GET veya POST isteği göndermez. Şöyle yaparız.
URLConnection connection = url.openConnection(proxy);
Çoğu kod connection nesnesini cast ediyor.
HttpURLConnection httpURLConnection =
  (HttpURLConnection) url.openConnection(proxy);
Daha sonra proxy bilgisi doldurulur. Bu yöntem HTTP için çalışıyor.
String encoded = new sun.misc.BASE64Encoder().
encodeBuffer((proxyUserName + ":" + proxyPassword).getBytes()).replace("\r\n","");
httpURLConnection.setRequestProperty("Proxy-Authorization", "Basic " + encoded);
HTTPS için proxy bilgisi şöyle doldurulur.
// Works for HTTP and HTTPS, but sets a global default!
Authenticator.setDefault(new Authenticator() {
  protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(proxyUserName, proxyPassword.toCharArray());
  }
});
En son olarak URLConnection sınıfının getInputStream metodu çağrılırsa adres http ise GET veya POST isteği yapılır.

Proxy ile çalışırken önce proxy adresine şu istek gönderilir.
CONNECT stackoverflow.com:443 HTTP/1.0\r\n
Proxy-Authorization: Basic c2F5WW91SGF2ZVNlZW5UaGlzSW5UaGVDb21tZW50cw==\r\n
\r\n

Proxy isteği kabul ederse şöyle başlayan bir cevap verir.
HTTP/1.0 200

Daha sonra gerçekten bağlanmak istediğimiz adresi veririz.
GET /questions/3304006/persistent-httpurlconnection-in-java HTTP/1.0\r\n
Host: stackoverflow.com\r\n
\r\n

Proxy bizim adımıza bağlantı kurup cevabı gönderir.

openStream metodu
Bir InputStream döner. Eğer adres http ise GET isteği gönderir. Sunucu 404 gönderirse exception fırlatır. Şöyle yaparız.
String url = "http://...";

try {
  InputStream in = new java.net.URL(url).openStream();
  ...
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
Bence openStream metodu, openConnection metodundan çok daha kullanışlı. Şöyle yaparız.
URL url = new URL("http://www.rssmix.com/u/8171434/rss.xml");
Document doc = builder.parse(url.openStream());
Bellekteki bir değişkene okumak için Apache Commons IO kullanarak şöyle yaparız.
final URL url = new URL("http://pat/to.tile");
final String content = IOUtils.toString(url.openStream(), "UTF-8");

URLConnection/ HttpURLConnection Sınıfı
URLConnection Sınıfı yazısına taşıdım.

Desktop Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.awt.Desktop;
browse metodu
Kurulu tarayıcı uygulamayı açmak için şöyle yaparız.
URI uri = new URI("http://www.google.com");
Desktop desktop = null;
if (Desktop.isDesktopSupported()) {
  desktop = Desktop.getDesktop();
}

if (desktop != null)
  desktop.browse(uri);
getDesktop metodu
Şöyle yaparız.
Desktop desktop = Desktop.getDesktop();
isDesktopSupported metodu
Şöyle yaparız.
if (Desktop.isDesktopSupported()) {...}
isSupported metodu
Şöyle yaparız.
desktop.isSupported(Desktop.Action.MAIL) {...}
mail metodu
Kurulu e-posta uygulamasını açıp mail göndermek için şöyle yaparız. Uygulamaya to, subject gibi bilgileri de geçebiliriz.
Desktop desktop;
if (Desktop.isDesktopSupported() 
    && (desktop = Desktop.getDesktop()).isSupported(Desktop.Action.MAIL)) {
  URI mailto = new URI("mailto:john@example.com?subject=Hello%20World");
  desktop.mail(mailto);
} else {
  throw new RuntimeException("desktop doesn't support mailto;");
}