PDA

View Full Version : خواندن از فایل



yegane8
چهارشنبه 21 تیر 1391, 22:33 عصر
سلام
من می خواهم از یک فایل حدود 20 خط بخونم و همه رو بریزم توی یک string و تمام اون متن رو بوسیله متد drawString چاپ کنم اما نمی دونم چطوری باید تمام متن رو از فایل بریزم توی یک string
لطفا کمک کنید
البته یکبار تمام متن رو خط به خط add کردم توی یک ArrayList اما با این کار نمی دونم چطوری از این متد استفاده کنم StringTokenizer(arrayText.get(i))
با تشکر

spiderman200700
چهارشنبه 21 تیر 1391, 23:59 عصر
یه متغییر String سراسری تعریف کنید و وقتی دارید خط به خط متن رو میخونید ، هر خط رو به اضافه ی این متغییر کنید.
بعد از خوندن تمام فایل متغییر سراسری حاوی تمام فایل به صورت یه String هست.

yegane8
پنج شنبه 22 تیر 1391, 00:14 صبح
ممنون
اینطوری همه خط ها پشت سر هم نشون داده می شوند
حالا باید چی کار کنم تا هرجا که تو فایل نوشته رفته خط بعدی تو برنامه هم بره

spiderman200700
پنج شنبه 22 تیر 1391, 01:48 صبح
میخواید توی چی نمایشش بدید؟
JTextArea ؟

yegane8
پنج شنبه 22 تیر 1391, 02:03 صبح
میخواید توی چی نمایشش بدید؟
JTextArea ؟
نه توی panel
(iهمون برنامه ای که خودتون تویه تاپیک مجموعه-برنامه‌های-نوشته-شده-به-زبان-جاو ص3) نوشتید فقط جوری تییر دادم که از متن فایل رو با مند drawString نمایش بده

spiderman200700
پنج شنبه 22 تیر 1391, 10:00 صبح
برنامه رو یه تغییر کوچیک دادم.
اگه موقع خوندن خطهای مختلف فایل و چسباندن اونا به هم ( برای تبدیل همه ی فایل به یه رشته) بین هر دو خط " . " قرار بدید. برنامه موقع رسیدن به این رشته به خط بعد میره.

yegane8
پنج شنبه 22 تیر 1391, 17:31 عصر
برنامه رو یه تغییر کوچیک دادم.
اگه موقع خوندن خطهای مختلف فایل و چسباندن اونا به هم ( برای تبدیل همه ی فایل به یه رشته) بین هر دو خط " . " قرار بدید. برنامه موقع رسیدن به این رشته به خط بعد میره.
نشد :(
اینطوری نوشتم
readFile =new Scanner(new File("name.txt"));
while(readFile.hasNextLine()){
text = text +"."+ readFile.nextLine();

}
میشه بگین کجاش اشتباهه ؟
باتشکر

spiderman200700
پنج شنبه 22 تیر 1391, 20:28 عصر
اینطوری بنویسید:
while( readFile.hasNextLine() ){
text +=" . " + readFile.nextLine();
}

yegane8
پنج شنبه 22 تیر 1391, 20:58 عصر
ممنون حالا باید چطوری این فرم رو توی scrol نمایش بدهم
نمی دونم باید چه چیز هایی رو add کنم توی یه panel و بعد panel رو به scrol و Scrol رو به frame
لطفا راهنمایی کنید
باتشکر

spiderman200700
پنج شنبه 22 تیر 1391, 23:33 عصر
خود TextLayout که از نوع JPanel هست رو به JScrollPane اضافه کنید و JScrollPane رو به JFrame

yegane8
جمعه 23 تیر 1391, 00:07 صبح
خود TextLayout که از نوع JPanel هست رو به JScrollPane اضافه کنید و JScrollPane رو به JFrame
اینطوری زدم نشد :((
public static void main(String args[]) {
JFrame frame = new JFrame("best");
JScrollPane scrol = new JScrollPane(new TextLayout());
scrol.add(new TextLayout());
frame.add(scrol);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setSize(600, 400);
frame.setVisible(true);
}

spiderman200700
جمعه 23 تیر 1391, 11:12 صبح
1. این خط اضافس :
scrol.add(new TextLayout());

2. توی متد سازنده TextLayout این خط رو اضافه کنید:
setPreferredSize(new Dimension(WIDTH, HEIGHT));

yegane8
جمعه 23 تیر 1391, 13:59 عصر
خیییییییییییلی ممنون درست شد :)))))))
میشه در مورد خطی که توو constructor گفتین بزنم یه توضیح مختصری بدین
باتشکر

spiderman200700
جمعه 23 تیر 1391, 14:38 عصر
خب خدارو شکر
با اون خط اندازه ی JPanel رو تعیین کردیم.
میتونید با بزرگ کردن اون اندازه کار متد رو بهتر درک کنید

yegane8
جمعه 23 تیر 1391, 17:54 عصر
سلام من تویه این یکی کلاس هم به مشکل برخوردم وقتی اسم فایل رو به عنوان ارگومان ارسال می کنم همون خطای :
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException رو میده :گریه:
public String learnFile;


private void toefl_btnActionPerformed(java.awt.event.ActionEven t evt) {
// TODO add your handling code here:

learnFile =evt.getActionCommand();
TextLayout t2 = new TextLayout();
t2.setFileName(learnFile);
t2.displayGramar();

}
اینم اون یکی کلاس که میخوام محتویات اوون فایلی که اسمش رو فرستادم نمایش بده
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.util.*;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class TextLayout extends JPanel {

private static final int LEFT_ALIGN = 0;
private static final int RIGHT_ALIGN = 1;
private static final int CENTER_ALIGN = 2;
private static final int LEFT_RIGHT_ALIGN = 3;
protected int align;
private Dimension d;
private Font font;
private Scanner readFile;
private FontMetrics fm;
private int fontSize;
private int fh, bl;
private int space;
private String text =" ";
private FlowLayout layout;
private Container container;
private JScrollPane scrol;
private JPanel panel;
private String File;

public TextLayout() {

setBackground(Color.ORANGE);
repaint();
readtext();
setPreferredSize(new Dimension(700, 2000));
try {
fontSize = 17;
} catch (NumberFormatException e) {
fontSize = 14;
}
align = CENTER_ALIGN;
}

@Override
protected void paintComponent(Graphics g) {
update(g);
}

public void displayGramar() {
JFrame frame = new JFrame("best");
JScrollPane scrol = new JScrollPane(new TextLayout());
frame.add(scrol);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setSize(600, 400);
frame.setVisible(true);

}

@Override
public void update(Graphics g) {
d = getSize();
g.setColor(getBackground());
g.fillRect(0, 0, d.width, d.height);
if (font == null) {
font = new Font("tahoma",
Font.PLAIN, fontSize);
}
g.setFont(font);
if (fm == null) {
fm = g.getFontMetrics();
bl = fm.getAscent();
fh = bl + fm.getDescent();
space = fm.stringWidth(" ");
}
g.setColor(Color.black);
StringTokenizer st = new StringTokenizer(text);
int x = 0;
int nextx;
int y = 0;
String word, sp;
int wordCount = 0;
String line = "";
while (st.hasMoreTokens()) {
word = st.nextToken();

if (word.equals(".")) {
drawString(g, line, wordCount,
fm.stringWidth(line), y + bl);
line = "";
wordCount = 0;
x = 0;
y = y + (fh * 2);
} else {
int w = fm.stringWidth(word);
if ((nextx = (x + space + w)) > d.width) {
drawString(g, line, wordCount,
fm.stringWidth(line), y + bl);
line = "";
wordCount = 0;
x = 0;
y = y + fh;
}
if (x != 0) {
sp = " ";
} else {
sp = "";
}
line = line + sp + word;
x = x + space + w;
wordCount++;
}
}
drawString(g, line, wordCount, fm.stringWidth(line), y + bl);
}

public void drawString(Graphics g, String line,
int wc, int lineW, int y) {
switch (align) {
case LEFT_ALIGN:
g.drawString(line, 0, y);
break;
case RIGHT_ALIGN:
g.drawString(line, d.width - lineW, y);
break;
case CENTER_ALIGN:
g.drawString(line, (d.width - lineW) / 2, y);
break;
case LEFT_RIGHT_ALIGN:
if (lineW < (int) (d.width * .75)) {
g.drawString(line, 0, y);
} else {
int toFill = (int) ((d.width - lineW) / wc);

int nudge = d.width - lineW - (toFill * wc);
int s = fm.stringWidth(" ");
StringTokenizer st = new StringTokenizer(line);
int x = 0;
while (st.hasMoreTokens()) {
String word = st.nextToken();
g.drawString(word, x, y);
if (nudge > 0) {
x = x + fm.stringWidth(word) + space + toFill + 1;
nudge--;
} else {
x = x + fm.stringWidth(word) + space + toFill;
}
}
}
break;
}
}

private void readtext() {

try{
readFile =new Scanner(new File(this.getFileName()));
}catch(Exception e){
System.out.println("doesnt exist");

}
while(readFile.hasNextLine()){
text +=" . " + readFile.nextLine();

}}

public static void main(String args[]) {
JFrame frame = new JFrame("best");
JScrollPane scrol = new JScrollPane(new TextLayout());
frame.add(scrol);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setSize(600, 400);
frame.setVisible(true);
}

void setFileName(String learnFile) {
this.File = learnFile;

}
String getFileName(){
return File;

}
}

لطفا بگین چرا اینطوری میشه؟
با تشکر

spiderman200700
شنبه 24 تیر 1391, 00:57 صبح
باید اسم فایل رو توی کانسترکتور ، قبل از فراخوانی متد readtext ست کنید، نه با متد setFileName .

yegane8
شنبه 24 تیر 1391, 01:52 صبح
باید اسم فایل رو توی کانسترکتور ، قبل از فراخوانی متد readtext ست کنید، نه با متد setFileName .
سلام این خط رو به خط اول constructor اضافه کردم بازم نشد همون پیام رو هم می داد :ناراحت:

this.File = this.getFileName();

spiderman200700
شنبه 24 تیر 1391, 10:23 صبح
سلام
منظورم اینطوری بود:
public TextLayout(String learnFile) {
this.File = learnFile;
setBackground(Color.ORANGE);
repaint();
readtext();
setPreferredSize(new Dimension(700, 2000));
try {
fontSize = 17;
} catch (NumberFormatException e) {
fontSize = 14;
}
align = CENTER_ALIGN;
}

ActionListener هم اینطوری میشه:
private void toefl_btnActionPerformed(java.awt.event.ActionEven t evt) {
learnFile =evt.getActionCommand();
TextLayout t2 = new TextLayout(learnFile);
t2.displayGramar();

}

متد setFileName و متد main رو هم کلا خذف کنید.

yegane8
شنبه 24 تیر 1391, 14:38 عصر
ممنوووون درست شد
ولی اشکال کاری که من می کردم چی بود؟
باتشکر

spiderman200700
شنبه 24 تیر 1391, 15:37 عصر
کاری که شما کردید باعث میشد که قب از اینکه نام فایل رو ست کنید شروع به خوندن فایل کنید
که چون قبل از ست کردن نام فایل متغیر Fileتوش null هست. پس اون استثنا پیش میومد