Text_sinifi

JAVA VERİ GİRDİ-ÇIKTI SINIFI TEXT

Komplike verilerin bilgisayara giriş ve çıkışlarının yapılması için java programlama dili mükemmel araçlar sunmuştur. Ancak bu araçların kullanımları çok basit olmadığından programlamaya yeni başlayanlar için bir engel teşkil edebilirler. Text sınıfı bu karmaşıklığı arka plandaki sınıfların içine gizlemek amacıyla geliştirilmiştir. Burada Text sınıfını kullanarak girdi çıktı yapılması örnekleriyle verilecektir.

Ekrandan tek bir veri okumak için:

import java.io.*;

public class SCO12E

{public static void main(String[] args) throws IOException

{BufferedReader cin=new BufferedReader(new InputStreamReader(System.in));

double number=Text.readDouble(cin);

System.out.println(number);}}

Veya

import java.io.*;

public class SCO12D

{ public static void main(String[] args) throws IOException

{ double number;

Text cin=new Text();

number=cin.readDouble();

System.out.println(number);

}}

örneklerinde görülen işlemler uygulanabilir.

Dosyadan tek bir veri okumak için:

import java.io.*;

public class SCO12F

{public static void main(String[] args) throws IOException

{ BufferedReader fin=new BufferedReader(new FileReader("girdi.txt"));

double number=Text.readDouble(fin);

System.out.println(number);}}

Veya

import java.io.*;

public class SCO12G

{public static void main(String[] args) throws IOException

{ Text cin=new Text("girdi.txt");

double number=cin.readDouble();

System.out.println(number);}}

Örneklerinde görülen işlemler uygulanabilir.

Dosyadan bir matris okumak için :

import java.io.*;

public class SCO12H

{public static void main(String[] args) throws IOException

{ double number[][]=Text.readDouble("girdi.txt");}}

işlemi kullanılır. burada hata oluşmaması için girdi dosyasının her satırının sonunda yeni satır basılmış olmalıdır(‘\n’ yenisatır karekteri – return ß)

Ekrandan grafik veri girdisi penceresi açarak matris değerlerini girmek için

import java.io.*;

public class SCO12I

{public static void main(String[] args) throws IOException

{ double number[][]=Text.readDouble(3);}}

değerler her satır için açılan pencereden veriler arasında bir boşluk bırakarak girilir.

Üstte verilen program parçacığında satır sayısı 3 dür, sütun sayısını birinci satıra girilen veri sayısı tayin eder.

Veya

import java.io.*;

public class SCO12J

{public static void main(String[] args) throws IOException

{ double number[][]=Text.readDouble(3,4);}}

Üstte verilen program parçacığında satır sayısı 3 dür, sütun sayısı 4 tür. Satıra girilen veri sayısı daha fazla olduğunda ihmal edilir.

Program çıktısı almak için :

Temel tek değişken dosyaya program çıktısı almak için (dosyaya yazmak için) :

import java.io.*;

public class SCO12K

{public static void main(String[] args) throws IOException

{ double a=1.245;

Text.printf("girdi.txt",a);}}

.

Text.printf komutunu kullanabiliriz (f : file – dosya kelimesinden)

Bir değişkenin değerini ekrana grafik formda yazmak için mevcut olan metodlar :

import javax.swing.*;

public class SCO12B

{public static void main(String[] args)

{double A[][]=Text.readDouble("R134a_S_TPln.txt");

Text.print(A);}}

Çıktı penceresi

şeklinde oluşacaktır. Buradaki başlıkları da kendimiz verebiliriz.

import javax.swing.*;

public class SCO12B1

{public static void main(String[] args)

{double A[][]=Text.readDouble("R134a_S_TPln.txt");

String baslik[]={"x ekseni","y ekseni"};

String genelbaslik="R134a_S_TPln.txt verisi";

Text.print(A,baslik,genelbaslik);}}

Çıktı penceresi

durumunu alacaktır.

Bir üstte dosyadan okuma ve ekrana bastırma iki kademeli işlemini tek kademede de yapabiliriz.

import javax.swing.*;

public class SCO12C

{public static void main(String[] args)

{String baslik[]={"Sıcaklık C","log(Basınç, kPa)"};

String genelbaslik="R134a_S_TPln.txt verisi";

Text.print("R134a_S_TPln.txt",baslik,genelbaslik);}}

Aynı veriyi başlıkları tanımlamadan da oluşturabiliriz.

import javax.swing.*;

public class SCO12C1

{public static void main(String[] args)

{ Text.print("R134a_S_TPln.txt");}}

Son olarak da birden fazla verimiz (matrisimiz) olduğunda bu verilerin hepsini aynı pencerede görmek istediğimizde nasıl yapacağımıza bir göz atalım. Burada Tüm verinin JPanel sınıfı x değişkeninde toplanmasını istiyoruz. Toplanan veri en sonunda Text.println(x,s1) metodu tarafından ekrana aktarılır. Bu metodu kullanmadan önce istediğimiz miktarda veriyi arka arkaya sıralayabiliriz.

import javax.swing.*;

public class SCO12A

{

public static void main(String[] args)

{double A[][]={{1.0,2.0,3.0,4.0},{3.0,4.0,5.0,6.0},{6.0,7.0,8.0,9.0}};

double B[][]=Text.readDouble("R134a_S_TPln.txt");

String s[]={"başlık 1","başlık 2","başlık 3"};

String s1="Genel başlık";

JPanel x=new JPanel();

Text.print(x,A,s,"A");

Text.print(x,B,s,"B");

Text.print(x,B,s,"C");

Text.println(x,s1);}}

Text sınıfında oluşan çıktı pencerelerinden veriyi direk olarak alabiliriz. Bunun için veriyifareileseçtikten sonra <Ctrl>C tuşuyla kopyelemek ve bir textdosyasıaçarak <Ctrl>V tuşuyla yapıştırmak kafidir.

Yukarıda bahsi geçen programı kullanabilmek için gerekli sınıflar altta listelenmiştir, isterseniz kodları benden elektronik olarak da temin edebilirsiniz (Turhan_coban@yahoo.com)

Dr. M. Turhan ÇOBAN

EGE Üniversitesi, Mühendislik Fakultesi,

Makine Bölümü,

Bornova, İZMİR

Ekler : Program listeleri

TEXT SINIFI

//============================================

// Numerical Analysis Package in Java

// Class Text to read data from screen or file

// and dısplay data in matrix form

// Dr. Turhan Coban

//============================================

import java.io.*;

import java.util.*;

import javax.swing.*;

import javax.swing.table.*;

import java.awt.*;

class Text

{

BufferedReader in;

/*

---------------------------------------------------

Static routines provided are:

---------------------------------------------------

public static void prompt(String s);

public static int readInt(BufferedReader in);

public static double readDouble(BufferedReader in);

public static String readString(BufferedReader in);

public static char readChar(BufferedReader in);

----------------------------------------------------

Dynamic routines provided are :

----------------------------------------------------

public void Text()

public void Text(String s1)

public void Text(File f1)

public int readInt();

public double readDouble();

public String readString();

public char readChar();

Sample use :

--------- reading a double--------------

BufferedReader cin=new BufferedReader(new InputStreamReader(System.in));

double number;

number=Text.readDouble(cin);

veya

double number;

Text cin=new Text();

number=cin.readDouble();

------ reading data from a file "datafile.dat"------

double number;

BufferedReader fin=new BufferedReader(new FileReader("datafile.dat"));

double number;

number=Text.readDouble(fin);

veya

double number;

Text cin=new Text("dataFile.dat");

number=cin.readDouble();

------ reading double array data from a file "datafile.dat"------

double a[][]=Text.readDouble("datafile.dat");

------ reading double array data from screen ------

double a[][]=Text.readDouble(3);

double a[][]=Text.readDouble(3,4);

------ displaying array data from screen ------

double a[][]=new double{{1,2,3},{4,5,6},{7,8,9}};

String heading={"column 1","column 2",column 3"};

Text.print(a);

Text.print(a'heading);

Text.print("datafile.dat",heading);

Text.print("datafile.dat");

double a[][]=Text.readDouble(3,4);

------ printing data into a file "printfile.dat"----

PrintStream fout=new PrintStream

(new FileOutputStream("printfile.dat"));

String a="turhan";

fout.println(a);

veya

BufferedWriter fout=new BufferedWriter(new FileWriter("datafile.dat"));

String a="Turhan");

fout.println(a);

----------------------------------------------------

*/

private static StringTokenizer T;

private static String S;

public Text()

{

in=new BufferedReader(new InputStreamReader(System.in));

}

public Text(String s1) throws IOException

{

in=new BufferedReader(new FileReader(s1));

}

public static void prompt (String s) {

System.out.print(s + " ");

System.out.flush();

}

public int readInt() throws IOException

{return Text.readInt(in);}

public double readDouble() throws IOException

{return Text.readDouble(in);}

public String readString() throws IOException

{return Text.readString(in);}

public char readChar() throws IOException

{return Text.readChar(in);}

public static int readInt (BufferedReader in) throws IOException

{

if (T==null) refresh(in);

while (true)

{

try {

String item = T.nextToken();

return Integer.valueOf(item.trim()).intValue();

}

catch (NoSuchElementException e1) { refresh (in);

} catch(NumberFormatException e2)

{ //System.err.println("Error in number, try again.");

}

}

}

public static char readChar (BufferedReader in) throws IOException

{

if (T==null) refresh(in);

while (true)

{

try {

return T.nextToken().charAt(0);

}

catch(NoSuchElementException e1) {refresh (in);}

}

}

public static double readDouble(BufferedReader in) throws IOException

{

if(T==null) refresh(in);

while (true) {

try {

String item = T.nextToken();

return Double.valueOf (item.trim()).doubleValue();

} catch(NoSuchElementException e1) {

refresh (in);

} catch(NumberFormatException e2)

{

//System.err.println("Error in number, try again.");

}

}

}

public static String readString(BufferedReader in) throws IOException

{

if(T==null) refresh (in);

while (true) {

try {return T.nextToken();}

catch (NoSuchElementException e1) {

refresh (in);

}

}

}

public static String readStringLine(BufferedReader in) throws IOException

{

//reads a line of strings from BufferedReader in

int ch;

String r = "";

boolean done = false;

while (!done)

{ try

{ ch = in.read();

if(ch < 0 || (char)ch == '\n' || (char)ch == '\0') done = true;

else r = r + (char) ch;

}

catch(java.io.IOException e) { done = true;}

}

return r.substring(0,(r.length()-1));

}

private static void refresh (BufferedReader in) throws IOException

{

String s = in.readLine();

if (s==null) throw new EOFException();

T = new StringTokenizer(s);

}

public static double[][] readDouble(String filename)

{

//read data in matrix form

// data length is not limited

Vector xi=new Vector();

int nn;

int m=2;

int i=0;

BufferedReader fin;

try{

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

try {

try{

try{

String s1=Text.readStringLine(fin);

StringTokenizer token=new StringTokenizer(s1);

int n=token.countTokens()-1;

m=n+1; //m tokens boyutludeğişken kolon sayısı

while(token.hasMoreTokens())

{

String s2=token.nextToken();

xi.add(s2);

}

i=0;

while(fin != null)

{

i++;

String s11=Text.readStringLine(fin);

//System.out.println(s11);

if(s11=="") break;

StringTokenizer token1=new StringTokenizer(s11);

while(token1.hasMoreTokens())

{

String s2=token1.nextToken();

xi.add(s2);

}

}

} catch(ArrayIndexOutOfBoundsException e_eof) { }

} catch(StringIndexOutOfBoundsException e_eof) { }

} catch(EOFException e_eof) {System.out.println("end of file"); }

} catch(IOException e_io) {System.out.println("file name is not existed"); }

nn=i;

//System.out.println("m="+m+"nn="+nn);

double aa[][]=new double[nn][m];

Enumeration nx=xi.elements();

for(i=0;i<nn;i++)

{

for(int j=0;j<m;j++)

{

String s1=(String)nx.nextElement();

Double ax=new Double(s1);

aa[i][j]=ax.doubleValue();

}

}

return aa;

}

public static double[][] readDoubleT(String filename)

{//veriyi ters matris olarak okur(satir ve sutun degisir)

double a[][]=readDouble(filename);

int n=a.length;

int m=a[0].length;

double b[][]=new double[m][n];

for(int i=0;i<n;i++)

{

for(int j=0;j<m;j++)

{

b[j][i]=a[i][j];

}

}

return b;

}

public static double[][] readDouble(int n,int m)

{

String s="line 0 ";

String s1=JOptionPane.showInputDialog(s);

StringTokenizer token=new StringTokenizer(s1);

double a[][]=new double[n][m];

int j=0;

for(j=0;j<m;j++)

{Double ax=new Double(token.nextToken());

a[0][j]=ax.doubleValue();}

for(int i=1;i<n;i++)

{

s="line "+i;

s1=JOptionPane.showInputDialog(s);

token=new StringTokenizer(s1);

j=0;

for(j=0;j<m;j++)

{Double ax=new Double(token.nextToken());

a[i][j]=ax.doubleValue();}

}

return a;

}

public static double[][] readDouble(int n)

{

// column number determined by number of data entered in first column

String s="line 0 ";

String s1=JOptionPane.showInputDialog(s);

StringTokenizer token=new StringTokenizer(s1);

int nn=token.countTokens()-1;

int m=nn+1;

double a[][]=new double[n][m];

int j=0;

while(token.hasMoreTokens())

{

Double ax=new Double(token.nextToken());

a[0][j++]=ax.doubleValue();

}

for(int i=1;i<n;i++)

{

s="line "+i;

s1=JOptionPane.showInputDialog(s);

token=new StringTokenizer(s1);

for(j=0;j<m;j++)

{Double ax=new Double(token.nextToken());

a[i][j]=ax.doubleValue();}

}

return a;

}

public static void print(double a[][],String baslik[])

{print(a,baslik,"data output(veri çıktısı) :");}

public static void print(double a[][],String baslik[],String bb)

{

JTable jt;

int n=a.length;

int m=a[0].length;

genelModel gm=new genelModel(a,baslik);

jt=new JTable(gm);

//JOptionPane.showMessageDialog(null,jt);

JFrame cerceve=new JFrame(bb);

cerceve.addWindowListener(new BasicWindowMonitor());

cerceve.getContentPane().add(new JScrollPane(jt));

cerceve.pack();

cerceve.setVisible(true);

}

public static void print(double a[][],String baslik)

{

JTable jt;

int n=a.length;

int m=a[0].length;

genelModel gm=new genelModel(a);

jt=new JTable(gm);

//JOptionPane.showMessageDialog(null,jt);

JFrame cerceve=new JFrame(baslik);

cerceve.addWindowListener(new BasicWindowMonitor());

cerceve.getContentPane().add(new JScrollPane(jt));

cerceve.pack();

cerceve.setVisible(true);

}

public static void print(double a[][])

{print(a,"data output(veri çıktısı) :");}

public static void print(String dosyaadi,String genelbaslik)

{

genelModel gm=new genelModel(dosyaadi);

JTable jt=new JTable(gm);

//JOptionPane.showMessageDialog(null,jt);

JFrame cerceve=new JFrame(genelbaslik);

cerceve.addWindowListener(new BasicWindowMonitor());

cerceve.getContentPane().add(new JScrollPane(jt));

cerceve.pack();

cerceve.setVisible(true);

}

public static void print(String dosyaadi,String[] baslik,String genelbaslik)

{

genelModel gm=new genelModel(dosyaadi,baslik);

JTable jt=new JTable(gm);

//JOptionPane.showMessageDialog(null,jt);

JFrame cerceve=new JFrame(genelbaslik);

cerceve.addWindowListener(new BasicWindowMonitor());

cerceve.getContentPane().add(new JScrollPane(jt));

cerceve.pack();

cerceve.setVisible(true);

}

public static void print(String dosyaadi)

{print(dosyaadi," "+dosyaadi+" :");}

//==========

//Component anapencere added versions of prınt statements

public static void print(JComponent anapencere,double a[][],String baslik[])

{print(anapencere,a,baslik,"data output(veri çıktısı) :");}

public static void print(JComponent anapencere,double a[][],String baslik[],String bb)

{

JButton B;

B=new JButton(bb);

JTable jt;

int n=a.length;

int m=a[0].length;

genelModel gm=new genelModel(a,baslik);

jt=new JTable(gm);

JScrollPane sp=new JScrollPane(jt);

JPanel cerceve=new JPanel();

cerceve.setLayout(new BorderLayout());

cerceve.add(B,BorderLayout.NORTH);

cerceve.add(sp,BorderLayout.SOUTH);

anapencere.add(cerceve);

}

public static void print(JComponent anapencere,double a[][],String baslik)

{

JButton B;

B=new JButton(baslik);

JTable jt;

int n=a.length;

int m=a[0].length;

genelModel gm=new genelModel(a);

jt=new JTable(gm);

JScrollPane sp=new JScrollPane(jt);

JPanel cerceve=new JPanel();

cerceve.setLayout(new BorderLayout());

cerceve.add(B,BorderLayout.NORTH);

cerceve.add(sp,BorderLayout.SOUTH);

anapencere.add(cerceve);

}

public static void print(JComponent anapencere,double a[][])

{print(anapencere,a,"data output(veri çıktısı) :");}

public static void print(JComponent anapencere,String dosyaadi,String baslik)

{

JButton B;

B=new JButton(baslik);

genelModel gm=new genelModel(dosyaadi);

JTable jt=new JTable(gm);

JScrollPane sp=new JScrollPane(jt);

JPanel cerceve=new JPanel();

cerceve.setLayout(new BorderLayout());

cerceve.add(B,BorderLayout.NORTH);

cerceve.add(sp,BorderLayout.SOUTH);

anapencere.add(cerceve);

}

public static void println(JComponent anapencere,String genelbaslik)

{

Container c;

JFrame cerceve=new JFrame(genelbaslik);

cerceve.addWindowListener(new BasicWindowMonitor());

c=cerceve.getContentPane();

c.add(new JScrollPane(anapencere));

cerceve.pack();

cerceve.setVisible(true);

}

public static void print(JComponent anapencere,String dosyaadi)

{print(anapencere,dosyaadi,""+dosyaadi+" :");}

public static void printf(String dosyaadi,String s) throws IOException

{ BufferedWriter fout=new BufferedWriter(new FileWriter(dosyaadi));

fout.write(s,0,s.length());

fout.close();}

public static void printf(String dosyaadi,double a) throws IOException

{ String s=""+a;

BufferedWriter fout=new BufferedWriter(new FileWriter(dosyaadi));

fout.write(s,0,s.length());

fout.close();}

}

GENELMODEL SINIFI

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.table.*;

import javax.swing.event.*;

import java.io.*;

import java.util.*;

class genelModel extends AbstractTableModel implements TableModelListener

{

Object[][] veri;

String[] baslik;

public genelModel(Object[][] verii,String basliki[])

{

int n=veri.length;

int m=veri[0].length;

veri=new Object[n][m];

baslik=new String[m];

for(int j=0;j<m;j++)

{for(int i=0;i<n;i++)

{veri[i][j]=verii[i][j];}

baslik[j]=basliki[j];

}

addTableModelListener(this);

}

public genelModel(Object[][] verii)

{

int n=veri.length;

int m=veri[0].length;

veri=new Object[n][m];

baslik=new String[m];

for(int j=0;j<m;j++)

{for(int i=0;i<n;i++)

{veri[i][j]=verii[i][j];}

baslik[j]=""+j;

}

}

public genelModel(int n,int m)

{

veri=new Object[n][m];

baslik=new String[m];

for(int j=0;j<m;j++)

{for(int i=0;i<n;i++)

{veri[i][j]=(Object)"0.0";}

}

}

public genelModel(double[][] verii)

{

int n=verii.length;

int m=verii[0].length;

veri=new Object[n][m];

baslik=new String[m];

veri=doubletoDouble(verii);

for(int j=0;j<m;j++)

baslik[j]=""+j;

}

public genelModel(double[][] verii,String basliki[])

{

int n=verii.length;

int m=verii[0].length;

int m1=basliki.length;

veri=new Object[n][m];

baslik=new String[m];

veri=doubletoDouble(verii);

if(m1>=m)

{

for(int j=0;j<m;j++)

baslik[j]=basliki[j];

}

else

{

for(int j=0;j<m1;j++)

baslik[j]=basliki[j];

for(int j=m1;j<m;j++)

baslik[j]=""+j;

}

}

public genelModel(String filename)

{

double a[][]=readDouble(filename);

int n=a.length;

int m=a[0].length;

veri=new Object[n][m];

baslik=new String[m];

veri=doubletoDouble(a);

for(int j=0;j<m;j++)

baslik[j]=""+j;

}

public genelModel(String filename,String basliki[])

{

double a[][]=readDouble(filename);

int n=a.length;

int m=a[0].length;

veri=new Object[n][m];

baslik=new String[m];

veri=doubletoDouble(a);

for(int j=0;j<m;j++)

baslik[j]=basliki[j];

}

public static Double[][] doubletoDouble(double xi[][])

{

int n=xi.length;

int m=xi[0].length;

Double X[][]=new Double[n][m];

for(int j=0;j<m;j++)

{for(int i=0;i<n;i++)

{X[i][j]=new Double(xi[i][j]);}

}

return X;

}

public static double[][] readDouble(String filename)

{

//veriyi oku bu metodun verisayısı sınırı yoktur

//istediğimiz uzunluktaki veriyi okuyabilir

Vector xi=new Vector();

int nn;

int m=2;

int i=0;

BufferedReader fin;

try{

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

try {

try{

try{

String s1=Text.readStringLine(fin);

//System.out.println(s1);

StringTokenizer token=new StringTokenizer(s1);

int n=token.countTokens()-1;

m=n+1; //m tokens boyutludeğişken kolon sayısı

while(token.hasMoreTokens())

{

String s2=token.nextToken();

xi.add(s2);

}

i=0;

while(fin != null)

{

i++;

String s11=Text.readStringLine(fin);

//System.out.println(s11);

if(s11=="") break;

StringTokenizer token1=new StringTokenizer(s11);

while(token1.hasMoreTokens())

{

String s2=token1.nextToken();

xi.add(s2);

}

}

} catch(ArrayIndexOutOfBoundsException e_eof) { }

} catch(StringIndexOutOfBoundsException e_eof) { }

} catch(EOFException e_eof) {System.out.println("end of file"); }

} catch(IOException e_io) {System.out.println("file name is not existed"); }

nn=i;

//System.out.println("m="+m+"nn="+nn);

double aa[][]=new double[nn][m];

Enumeration nx=xi.elements();

for(i=0;i<nn;i++)

{

for(int j=0;j<m;j++)

{

String s1=(String)nx.nextElement();

Double ax=new Double(s1);

aa[i][j]=ax.doubleValue();

}

}

return aa;

}

public int getRowCount() {return veri.length;}

public int getColumnCount() {return baslik.length;}

public Object getValueAt(int satir,int sutun) {return veri[satir][sutun];}

public String getColumnName(int c) {return baslik[c];}

public void setValueAt(Object val, int row, int col)

{veri[row][col] = val;}

public void setValues(String filename)

{veri=doubletoDouble(readDouble(filename));}

public void tableChanged(TableModelEvent e)

{

}

public double[][] todouble()

{ int n=veri.length;

int m=veri[0].length;

double x[][]=new double[n][m];

for(int j=0;j<m;j++)

{for(int i=0;i<n;i++)

{x[i][j]=Double.parseDouble((String)(veri[i][j]));}

}

return x;

}

public void setValues(double xi[][],String[] basliki)

{

int n=xi.length;

int m=xi[0].length;

Double X[][]=new Double[n][m];

for(int j=0;j<m;j++)

{for(int i=0;i<n;i++)

{X[i][j]=new Double(xi[i][j]);}

baslik[j]=basliki[j];

}

veri=X;

}

public Object[][] getValues(){return veri;}

public boolean isCellEditable(int row, int col) {return true;}

}

BASICWINDOWMONITOR SINIFI

import java.awt.event.*;

import java.awt.Window;

public class BasicWindowMonitor extends WindowAdapter

{

public void windowClosing(WindowEvent e)

{

Window w=e.getWindow();

w.setVisible(false);

w.dispose();

System.exit(0);

}

}