ورود

View Full Version : اشکال هنگام خواندن فایل



mahdi68
یک شنبه 18 بهمن 1388, 01:45 صبح
سلام
من دو تا فابل دارم که توشون متن ذخیره شده من محتویات هر سطر از هر فایل در یک آرایه خیره میکنم

stText = readUnicodeFile("test.txt", "UTF-8");
stText1 = readUnicodeFile("test1.txt", "UTF-8");
حالا دو تا آرایه داریم که محتویات هر فایل تو یکی از اونا ذخیره شده من وقتی میخوام از هر آرایه یک خانه اش را چاپ کنم مثلا

g.drawString(text[3],getWidth()/2,getHeight()/2,Graphics.BOTTOM|Graphics.LEFT);
g.drawString(text1[0],getWidth()/2+30,getHeight()/2+30,Graphics.BOTTOM|Graphics.LEFT);
یعنی سطر دوم از فایل اول و سطر اول از فایل دوم
ولی اتفاقی که می افته اینه که سطر دوم از فایل دوم و سطر اول از فایل دوم چاپ میشه !!! کجای کار من اشتباه هست ؟؟؟؟ لطفا راهنماییم کنید
متشکرم

ermia2008
یک شنبه 18 بهمن 1388, 12:27 عصر
سلام
من دو تا فابل دارم که توشون متن ذخیره شده من محتویات هر سطر از هر فایل در یک آرایه خیره میکنم

stText = readUnicodeFile("test.txt", "UTF-8");
stText1 = readUnicodeFile("test1.txt", "UTF-8");
حالا دو تا آرایه داریم که محتویات هر فایل تو یکی از اونا ذخیره شده من وقتی میخوام از هر آرایه یک خانه اش را چاپ کنم مثلا

g.drawString(text[3],getWidth()/2,getHeight()/2,Graphics.BOTTOM|Graphics.LEFT);
g.drawString(text1[0],getWidth()/2+30,getHeight()/2+30,Graphics.BOTTOM|Graphics.LEFT);
یعنی سطر دوم از فایل اول و سطر اول از فایل دوم
ولی اتفاقی که می افته اینه که سطر دوم از فایل دوم و سطر اول از فایل دوم چاپ میشه !!! کجای کار من اشتباه هست ؟؟؟؟ لطفا راهنماییم کنید
متشکرم

سلام
تنها احتمالی که می تونم بدم اینه که محتویات هر دو آرایه یکی هست!
محتویات آرایه ها رو قبل از اینکه g.draw متن ها رو چاپ کنه چک کردید؟

mahdi68
یک شنبه 18 بهمن 1388, 13:54 عصر
من مشکلم اینه که چرا محتویات هر دو یکی میشه ؟؟؟ من واسه هر آرایه آدرس یک فایل مختلف دادم که متن فایل ها هم با هم فرق میکنه !!! در ضمن و قتی جای کدها رو باهم عوض میکنم بازم هر دو آرایه به فایل کدی که در آخر اومده اشاره میکنند !!! این هم تابعی هست که واسه خوندن فایل به کار میبرم

private String[] readUnicodeFile(String string, String string0) {
StringBuffer buffer = new StringBuffer();

InputStream is = null;
InputStreamReader isr = null;
try {
int ch = 0, a = '/';

Class c = this.getClass();
is = c.getResourceAsStream(string);
isr = new InputStreamReader(is, string0);


while ((ch = isr.read()) > -1) {
if (ch == a) {
name[i] = buffer.toString();
i = i + 1;
buffer.delete(0, buffer.length());

} else {
buffer.append((char) ch);
}
}
isr.close();
if (is != null) {

is.close();
}


} catch (Exception ex) {
ex.printStackTrace();
}
return name;

}

mahdi68
یک شنبه 18 بهمن 1388, 15:30 عصر
سلام من برنامه دیباگ کردم و متوجه شدم وقتی اطلاعت تو آرایه دوم نوشته میشن اطلاعات آرایه اول هم تغییر میکنه !!! آرایه ای که تابع برمیگردونه سراسری تعریف کرده بودم (name) که به صورت محلی و تو خود تابع تعریف کردم و مشکل حل شد :تشویق: ولی متوجه نشدم که چرا تعریف سراسری این آرایه باعث این مشکل میشه ؟؟؟:متفکر:
لطفا اگه کسی میدونه من راهنمایی کنه
متشکرم

ermia2008
یک شنبه 18 بهمن 1388, 23:55 عصر
سلام من برنامه دیباگ کردم و متوجه شدم وقتی اطلاعت تو آرایه دوم نوشته میشن اطلاعات آرایه اول هم تغییر میکنه !!! آرایه ای که تابع برمیگردونه سراسری تعریف کرده بودم (name) که به صورت محلی و تو خود تابع تعریف کردم و مشکل حل شد :تشویق: ولی متوجه نشدم که چرا تعریف سراسری این آرایه باعث این مشکل میشه ؟؟؟:متفکر:
لطفا اگه کسی میدونه من راهنمایی کنه
متشکرم

این مشکلیه که گریبانگیر خیلیا شده از جمله خود من!
دلیلش هم اینه که در بار اول که شما این تابع رو فراخوانی می کنید در واقع اشاره گری به آرایه name که سراسری هست برگشت داده میشه. بنابراین از این به بعد هرگاه source یعنی آرایه name تغییر کنه آرایه اول شما هم که به آرایه name اشاره میکنه تغییر خواهد کرد. بنابر این وقتی برای بار دوم شما این تابع رو فراخوانی می کنید و آرایه name تغییر میکنه در واقع آرایه اول هم که به name اشاره میکنه تغییر خواهد کرد!

موفق باشید