• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Java ile harici sistem kodu || programı çalıştırma

  • Posted by Kodedu
  • Categories backend, Genel, Uncategorized
  • Date 21 Temmuz 2011

Java programlama dilinde, herhangi bir işletim sistemi üzerinde, sistem komutu yada harici herhangi bir executable koşturmak elbet mümkün, fakat bu işlemleri kolaylaştıracak bir API , JDK içinde şu anda bulunmuyor. (ör: Herhangi bir işletim sistemi üzerinde kullanıcı hesabı oluşturmak veya bir kullanıcı hesabının resmini değiştirmek gibi ) . Bu gibi işlemler için mevcut işletim sisteminin Command Line Interface ( CLI ) ‘sini yani Komut Satırı Arayüzünü  kullanmak durumundayız. Bu arayüzleri kullanabilmek içinse, hangi işlemi yapmak istiyorsak o işlemi icra edecek komut yada sistem programlarını ve kullanılış biçimlerini bilmek durumundayız. ( ör: Windows üzerinde komut satırında bir dizine ait tüm dosyaları ve dizinleri listelemek istiyorsak; “dir“ komutunu işletmeliyiz ) . Dikkat edeceğimiz husus “dir” bir komuttur bir sistem programı değil. Yani “C:Windowssystem32” dizininde “dir.exe” diye bir program bulunması söz konusu değildir. Söz konusu işletim sistemi Linux türevi ise bu komut “ls“ olacaktır. İsterseniz söz konusu bilgileri güzel bir örnek ile taçlandıralım. Örneğimizde, Windows ve Linux türevi bir işletim sistemi üzerinde bir kullanıcı hesabı oluşturalım. Programımızı Swing çatısı üzerine kuracağımız için, kod kalabalığını tek tek anlatmak yerine işimize yarayan asıl kod bölümlerini açıklayalım. Zaten kod kaynağında satır satır açıklamaları bulabileceksiniz.

 

1)    Bize mevcut işletim sisteminin Windows tabanlı mı? Linux tabanlı mı? Olduğu bilgisi gerekiyor, bunu ayrıştırmak için ise System sınıfının getProperty metodundan faydalanıyoruz.

  • String osName = System.getProperty(“os.name”);

2)    Dönen ifadeyi contains metoduna tabi tutarak işimize yarayacak dallanmayı yapıyoruz.

  • osName.contains(“Windows”) || osName.contains(“Linux”)

3)    Harici komut veya program koşturmak için Java’ da Runtime , ProcessBuilder ve Process sınıflarından faydalanacağız. Aslında ikiside aynı işi görmekte fakat Runtime sınıfının kontrol edilebilirliği daha güç. Windows üzerinde user oluşturmak çok kolay, her iki sınıfında kullanımını göstermek adına Windows üzerinde Runtime sınıfını kullanalım.

Windows için ;

Aşağıdaki betiği koşturmak yeterli.

Runtime sınıfının getRuntime metodu ile bir boş process çağırıyoruz.

exec metodu ile process oluşturulup koşturuluyor ve bizim tanımladığımız getMessage metodu ile standart uyarı, bilgi ve hata mesajları ekrana bastırılıyor.

  • Runtime rt = Runtime.getRuntime();
  • String win32=”net user /add “+user.getText()+” “+pass.getText();
  • getMessage(rt.exec(win32));

 Linux için;

  • usta@ubuntu:~$ sudo useradd UserName -g GroupName -b /home -m
  • usta@ubuntu:~$ passwd UserPass

İlk satırın icrası ardından Linux kabuğu bizden yönetici şifresi isteyecektir. İkinci aşamada ise oluşturduğumuz hesabın parolasını belirteceğiz. Şu varki, klavye haricinde bir programlama dilinden şifre bilgisi girmek istiyorsak, kod satırımıza  –S parametresi eklemeliyiz.

  •     ProcessBuilder pb = new ProcessBuilder(commands);
  •     Process process = pb.start();

ProcessBuilder sınıfının kurucu metoduna, ArrayList türündeki komutlarımızı gönderiyoruz. Ardından start vererek işlemi başlatıyoruz. Kabuktaki ilk satırı işlettikten sonra, yönetici parolası istenecek şimdi onu girelim..

  • stdin= new PrintWriter( process.getOutputStream());
  • stdin.println(pwdSudo.getText());
  • stdin.flush();

-S parametresi burada PrintWriter sınıfı aracılığı ile ekrana yönetici şifresi basmaya yarıyor. getOutputStream metodu ile, konsola bir giriş yapılacağını belirtiyoruz. flush metodu ise, buffer’ da veri bulunuyorsa bunları tamamen aktarmaya yarıyor. Konsoldaki ikinci satırda ise, aynı şekilde oluşturduğumuz kullanıcının şifresini giriyoruz. Şimdi her şey güzel fakat. İşlem başarılı mı? Hatalı mı? Bunları bilmek hakkımız. Bunun için mevcut process’ imizin getInputStream() ve getErrorStream() metodlarından faydalanıyoruz ve satır satır komut arayüzünün bize sunduğu bilgileri çekiyoruz ve istediğimiz gibi ekranda gösteriyoruz. Bu şekilde Java ile çalışan, bir komut dizini programı yapılabilir,  yada aynı şekilde başka başka executable’ lar çalıştırılabilir..

 

  • Proje dosyaları
  • Share:
author avatar
Kodedu

Next post

Sanal web browser - HtmlUnit
22 Ağustos 2011

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

    1 Comment

  1. eminsahin
    23 Temmuz 2011
    Cevapla

    Çok faydalı oldu teşekkürler.

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Java Mimarisiyle Kurumsal Çözümler : Kurumsal Java Kitabı
16Eyl2012
Java API for JSON Processing – Stream bazlı JSON Üretmek ve Tüketmek
06Ağu2013
AsciidocFX projesi Duke’s Choice Award 2015 ödülünü kazandı
28Eki2015
Knockout.js – Hesap Makinesi Örneği
02Şub2013

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • Coupling ve Cohesion Kavramları Nedir? için Hilal
  • Naïve Bayes Sınıflandırma Algoritması için Rahman Usta
  • Naïve Bayes Sınıflandırma Algoritması için Mete
  • YAML Nedir? Neden YAML Kullanmalıyız? için kara
  • JWT (JSON Web Tokens) Nedir? Ne işe yarar? için Furkan

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.