Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

dosyaya veri yazdırmak ve güncellemek.(java)


Dwinz

Öne çıkan mesajlar

öncelikle javada yeni olduğumu söyleyerek konuya girmek istiyorum. diğer dilleri hiç bilmiyorum gerçi. neyse olay şu ki benim bi kütüphane programı yazmam gerekiyor. işte üyeler olucak, kitaplar olucak, kitapların bir takım özellikleri olucak ve üyeler kitapları alıcak bi süreliğine falan diye gidiyor böyle. yalnız işte kitap listesini, üye listesini, kitap bilgilerini dosyalarda tutmam gerekiyor. çok şey denedim aslında dosyaya yazdırıyorum fakat sorun şu ki dosyayı kapatıp yeni bi(örneğin kitap yada üye ismi) veri girmek istediğimde. ilk satır silinip üzerine yenisi yazılıyor. bu sorunu nasıl aşıcam. hangi methodları kullanmak lazım.
Formatter, FileWriter denedim tam olarak randıman alamadım(evet beceremedim).
ArrayList'e atıyım dedim yarattıgım objeleri ordan isimlerini falan çağarıyım dedim. ArrayListin indexinden getName falan çağaramadım. nasıl olcak bielemedim kısacası.
yardımcı olabilecek varsa çok makbule geçer.

şunlarıda denedim ayrıca(birazcık java.


private Formatter f;

public void OpenFileMembers(){
try{
f = new Formatter("srclibrarysystemmembers.txt");
}
catch ( SecurityException securityException ){
System.err.println(
"You do not have write access to this file." );
System.exit( 1 );
} catch ( FileNotFoundException filesNotFoundException ){
System.err.println( "Error creating file." );
System.exit( 1 );
}

}

public void AddMembers(){
Members member = new Members();
Scanner input = new Scanner(System.in);
System.out.println("isim girin");
member.SetMemberName(input.next());
f.format("%s n", member.GetMemberName());
}

public void CloseFileMembers(){
f.close();
}
------------------------------------------
buda main olsun.
Files f = new Files();
f.OpenFileMembers();
f.AddMembers();
f.CloseFileMembers();
f.OpenFileMembers();
f.AddMembers();
f.CloseFileMembers();

gibi şeyler denedim pek yemedi. üstüne yazıyor. boş kalan yerden devam etmiyor.

Link to comment
Sosyal ağlarda paylaş

Dosyanın sonuna eklemek için FileWriter'deki append metodunu kullanabilirsin. Ama belli bir satır silmek istediğinde ya da satırları sıralamak istediğinde ne yapacaksın?

Bana göre şu adımları izlersen işini kolaylaştırırsın. Güncelleme sırasında bütün dosyayı baştan yazmış olacaksın ama bence ilk aşamada üstünde durmaya değmez.

1) İlk önce verilerin için bir veri yapısı oluştur. Bir dizi class ve metod'lardan oluşacak şekilde mesela. Liste falan da kullanabilirsin gerektiği yerde. Anladığıma göre zaten yapmışsın böyle bir şey.

2) Main metodu bulunduran bir test class'ı yap. Main içinde konsoldan herhangi bir input okumadan veri yapını örnek bilgilerle doldur. Üye, kitap vs oluştur. Konsol ve dosya ile ilgili bir şey bulunmayacak içinde.

3) Veri yapını tamamen dosyaya yazdıracak bir metod yaz.

4) Yeni yazdığın metod ile test metodunda oluşturduğun yapıyı dosyaya yazdırıp test et.

5) Sıra geldi işin okuma kısmına: Dosyadan tüm bilgileri okuyup bu veri yapısına dönüştürecek bir metod yaz. Dosyayı okuyup veri yapına çevir. Hiç bir değişik yapmadan tekrar yazdır bakalım çalışıyor mu.

Geriye sadece işlemlerini veri yapının üstünde yapmak kalıyor.
Link to comment
Sosyal ağlarda paylaş

hmm peki. akşam bi uğraşıyım bida. bu arada ArrayListin içine bi objeyi attıpım zaman. ArrayListin içinden o objenin ismini,soyismini yilini falan nasi çekicem.
hedeList.getIndex(1).GetName gibi bi methodu çağırmak istesem gelmiyor sanırım.Arrayların özelliklerini tamamen kullanamıyoruz sanırım. nası çözmek lazım o olayı.? yada (1000lik mesela) sınırı fazla olan bi diziyemi atıyım yarattıgım objeleri?
Link to comment
Sosyal ağlarda paylaş

Ne yapmak istediğini bilsem daha iyi yardımcı olabilirdim.

List list = new ArrayList();

şeklinde bir bir liste ürettiğini varsayıyorum. Liste içindeki tüm elemanlara şu şekilde ulaşabilirsin: ("list içindeki her member için" diye oku.)

for (Member member : list) {
System.out.println(member.getName());
}

Liste içindeki tüm elemanlar için System.out.println(member.getName()) çağırmış oluyorsun.

Eğer nesnelerinde unique bir id varsa liste yerine map kullanmayı da düşünebilirsin. Ama işine yarar mı bilmiyorum boşuna devamını anlatmıyayım. :)
Link to comment
Sosyal ağlarda paylaş

Dwinz said:

hmm peki. akşam bi uğraşıyım bida. bu arada ArrayListin içine bi objeyi attıpım zaman. ArrayListin içinden o objenin ismini,soyismini yilini falan nasi çekicem.
hedeList.getIndex(1).GetName gibi bi methodu çağırmak istesem gelmiyor sanırım.Arrayların özelliklerini tamamen kullanamıyoruz sanırım. nası çözmek lazım o olayı.? yada (1000lik mesela) sınırı fazla olan bi diziyemi atıyım yarattıgım objeleri?
getIndex diye bi method hatirlamiyorum ben, getIndexOf kullaniyorsan eger yanlislikla, o bir objenin indexini dondurur.

hedeList.get(index) yapabilirsin, index iste istedigin memberin indexi olucak. her zaman for loopuyla donemezsin sonucta yani. diyelim bi entry guncelliceksin, lamer gibi linear search yapmis olursun boyle yaparsan.


ben ne yapardim: her entry'e bir ID atardim. Bu ID'yi kisaca entry objesinin HashCode'u olarak gorebilirsin. guzel bir hashcode methodu yazarsin Entry class'ina.

ve sonra bir Hashtable yaparsin Hashtable library; seklinde. Ister ID kullanarak, ister direk verilen bir Entry'e look up zart zurt yaparak halledebilirsin burdan isini, ekleme silme guncelleme zart zurt.

Dosyaya neden surekli yazdirmak istedin anlamadim ama Hashtable'da tutup boyle, en son islemler bitince yazdirsan daha guzel olur, veya istersen log tutar, veya ara sira, atiyorum 10 islemde bir, yazdirirsin library'i olur da program cakarsa uzun vadede elimde son hali olsun diye.

edit: Entry den kastim iste library e ekleyip cikardigin falan seyler.
Link to comment
Sosyal ağlarda paylaş

abi işte o kadar ilerlemedik yeni sayılırız daha ondan oluyor tüm sorun. En son gördüğümüz konular Exceptions, Files ve Recursive metodlar.

projede bu

3. Library system
Design and implement a library system. You will keep track of books, library members and books that members borrow from the library. For books, your program should keep track of the following information for an entry:

Book name, writer name, year, publisher, ISBN number.

Implement a menu with following functionality:

a. Add a book: Your program should add the data entered by the user to the file.

b. Update a book : Your program should update the data of a selected entry.

c. Delete a book : Your program should delete an entry specified by the user.

d. Add a member

e. Update a member

f. Delete a member

g. Loan a book to a member

h. Get a book back from a member

i. List all of the members

j. List all of the books


yani dosyaya yazmam gerekiyorda. ArrayListi yanlış yaratıyormuşum bide şu append olayını bilmediğimden kaynaklandı sorunlar. Şimdi bi düzene oturcak bakalım. Biraz kafa patlatıyım gelcek devamı gibi. Cevaplar için çok sağolun, hele append olayı efsane oldu öğrendiğim :)
bi sorun olursa burdan yine başvururum size artık. tekrar tşk.
Link to comment
Sosyal ağlarda paylaş

bi soru daha sorayım burdan.
Şimdi üyeleri tuttugum bi arraylistim var.


public Members(String name){
SetMemberName(name);
}//constructer

ArrayList<Members> Members = new ArrayList();//burda tutcam

buttona bastıgında

Members m = new Members();
m.Members.add(new Members(jTextField1.getText()));
-burdada jList e eklemesini istiyorum her yazdığım üyenin ismini.

beceremedim olmadı.netten denediklerimde olmadı. hadi hayırlısı.en iyisi gui kullanmasammı napsam :D
Link to comment
Sosyal ağlarda paylaş

Dwinz said:

bi soru daha sorayım burdan.
Şimdi üyeleri tuttugum bi arraylistim var.


public Members(String name){
SetMemberName(name);
}//constructer

ArrayList<Members> Members = new ArrayList();//burda tutcam

buttona bastıgında

Members m = new Members();
m.Members.add(new Members(jTextField1.getText()));
-burdada jList e eklemesini istiyorum her yazdığım üyenin ismini.

beceremedim olmadı.netten denediklerimde olmadı. hadi hayırlısı.en iyisi gui kullanmasammı napsam :D

eger dogru anladiysam:

Members yanlis bir adlandirma, ilk olarak bunlara dikkat et ki ileride uzun kodlar yazdiginda anlasilabilir olsun.
Members degil Member olmali o cunku tek bir entry'i temsil ediyor. Members dedigin zaman birden fazla memberdan bahsediyorsun, listeni boyle adlandirmalisin yani. Hatan da, listenin ismine de Members demen, boylece kisaca soyle bisey yapmis oluyorsun:

Object Object = new Object();

e bu da yanlis tabi. Dogrusu soyle:
ArrayList members = new ArrayList();

yapman gerek. Senin hatan, liste ismi icin hali hazirda bir type ismi olan Members adini vermen, bu bir.

Bu members listesini asil programinda protected bi field olarak tutucaksin tabi, Member class'i ayri olacak. O da her bir library entry sini temsil edicek iste, String name diye bi field i olacak falan filan halletmissindir zaten onu.

Sonra, ana programda listene bir eleman eklemek icin:

Member m = new Member(buraya ne ekliceksen artik anlamam ben o buton olaylarindan);
members.add(m);

budur. Bi tane member yaratip, sonra onu members'a ekliyorsun iste.
Link to comment
Sosyal ağlarda paylaş

Şimdi JList için kolaylık olsun dersen liste için DefaultListModel kullanabilirsin. DefaultListModel.addElement metodu ile listeye bir nesne eklediğinde otomatik olaral JList'i güncellemiş olursun. Aşağıdaki örnek konsolda isim okuyup JList'e atıyor.

Örnek kod


import java.awt.BorderLayout;
import java.util.Scanner;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;


public class MainFrame extends JFrame {

private DefaultListModel members = new DefaultListModel();

public MainFrame() {
super("Hello Pati!");
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(new JList(members));
}

public static void main(String ... args) {
MainFrame frame = new MainFrame();
frame.setVisible(true);

Scanner scanner = new Scanner(System.in);
String member;
while ((member = scanner.next()) != null) {
frame.members.addElement(member);
}
}

}



DefaultListModel yerine Vector de kullanırsan, vector'e eleman ekledikten sonra JList'i extra güncellenmeden gerekebilir.

Vector ile örnek


import java.awt.BorderLayout;
import java.util.Scanner;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JList;


public class MainFrame extends JFrame {

private Vector<String> members = new Vector<String>();
private JList membersJList = new JList(members);

public MainFrame() {
super("Hello Pati!");
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(membersJList);
}

public static void main(String ... args) {
MainFrame frame = new MainFrame();
frame.setVisible(true);

Scanner scanner = new Scanner(System.in);
String member;
while ((member = scanner.next()) != null) {
frame.members.addElement(member);
frame.membersJList.updateUI();
}
}

}



Not: Sen liste içine String yerine Member nesnelerine koyacaksın muhtemelen. O zaman liste içinde Member@23232 gibi şeyler görürsen şaşırma. JList içina koyduğun nesnelerine görüntülemek için nesnenin toString metodunu çağırır. Member class'ında bu toString metodunu overwrite edip istediğin şekilde yazdırabilirsin.

toString overwrite edilmiş Member class'ıyla birlikte son hali


import java.awt.BorderLayout;
import java.util.Scanner;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JList;


public class MainFrame extends JFrame {

private Vector<Member> members = new Vector<Member>();
private JList membersJList = new JList(members);

public MainFrame() {
super("Hello Pati!");
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(membersJList);
}

public static void main(String ... args) {
MainFrame frame = new MainFrame();
frame.setVisible(true);

Scanner scanner = new Scanner(System.in);
String name;
while ((name = scanner.next()) != null) {
frame.members.addElement(new Member(name));
frame.membersJList.updateUI();
}
}

}

class Member {

private String name;

public Member(String name) {
this.name = name;
}

@Override
public String toString() {
return name;
}
}

Link to comment
Sosyal ağlarda paylaş

ben sorularıma yine aynı proje için burdan devam ediyim.
proje şu an bitti sayılır.hatta burdan indirebilirsiniz nası bişey oldugunu görmek için 14kb bişi. hocanın istedikleri şu ana kadar çalışıyor. yalnız ben artı bişeyler katmak istedim oda şu.

programın şu an yaptığı.


ArrayList<Books> BookList = new ArrayList();
ArrayList<Members> MemberList = new ArrayList();



bütün hikaye bu listeler içinde dönüyor. ve programda üye ve kitap özellikleri her güncellendiğinde ve yeni eklenip çıkartıldıgında program bu listeleri dosyaya yazdırıyor.
şu şekilde.

jTextArea1.setText("");
for(Members m: MemberList)
jTextArea1.append(m.toString());

jTextArea2.setText("");
for(Books b: BookList)
jTextArea2.append(b.toString());

programı kapattıgımda örneğin şu şekilde kaydediyor

books.txt dosyasının içi
kitapismi1, yazarismi1, yayımcı1, isbn1, 1001, bosta,
kitapismi2, yazarismi2, yayımcı2, isbn2, 1002, bosta,

members.txt dosyasının içi
uyeismi1,
uyeismi2,



benim artı olarak yapmak istediğim.

şimdi asıl amaca gelirsek.
books.txt ve members.txt dosyalarının içindeki bilgileri kullanarak, program her başladıgında o bilgileri ArrayList lere atarak yeni obje kaydetmesi. hoca tokenizer kullanarak yapabilirsin dedi. dosyalardaki virgülleri tokenizer olarak kullanıcakmışım.

StringTokenizer token = new StringTokenizer(",");

sanırsam şu şekilde olcak.

while(token.hasMoreTokens){
...
}

orasını çözemedim. File ı açmak lazım ilk. FileReader'dan alırsam tokenizerı nasıl kullanıcam...tokenizerla nextToken();
dersem dosyayla nası ilişkiye gircem falan çözemedim.


cevaplarınızın benim için altın değerinde gerçekten...
Link to comment
Sosyal ağlarda paylaş

Soyle:

Simdi reader once (hata olmadigina emin olman icin)

BufferedReader input = new BufferedReader(new FileReader(filename));

String line = input.readLine(); ile aldin bir line i

sonra bu line i tokenize ediyorsun:

StringTokenizer tokenizer = new StringTokenizer(line, ",");
newlerken tokenize edicegin seyi de vermen lazim yani. eger delimiter i buradaki gibi "," olarak belirtmez sadece line'i girersen, o zaman bosluk nokta ve virgullerden ayirir.

Sonra,

while(tokenizer.hasMoreTokens()) {
String bilgi = tokenizer.nextToken();
sonra artik bu bilgi ile istedigini yapabilirsin
}



diyelim ki line soyle bisey

a,b c d,e,f, , g

bilgi'ye while'in her loopunda atanacak degerler bunlar:
a
b c d
e
f
(bosluk)
g
Link to comment
Sosyal ağlarda paylaş

Sonra da o string'leri kullanarak nesneni oluşturup listeye ekleyeceksin. Yukarıda Penth'in dediği gibi 6 tane string okudun diyelim. bookname, writer, publisher, isbn, year, ownername değişkenlerine kaydettin.

Sonra constructor'unu kullanarak nesneni oluşturup listene ekliyorsun:
books.add(new Book(bookname, writer, publisher, isbn, year, ownername)); gibi

Bu arada programa baktım. Hoş güzüküyor. JList kullanmaktan vazgeçmişsin. :) JList kullanmış olsaydın silerken ya da değişim yaparken önce ISBN ile arama yapmana gerek olmazdı. Doğrudan listeden bir satır seçip yapabilirdin işlemi.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...