ورود

View Full Version : سوال: ذخیره کردن فایل متنی بر روی کامپیوتر



hesamy2004
جمعه 23 مهر 1389, 18:27 عصر
آقا من یه تکست باکس دارم که توش پیام رو مینویسم. یه دکمه ذخیره هم دارم که باید پیام رو یه جایی ذخیره کنه. برای تست، آدرس فولدر رو به برنامه دادم. وقتی برنامه رو اجرا میکنم ظاهراً همه چیز خوبه ولی وقتی بر روی دکمه ذخیره کلیک میکنم سیمولاتور هیچ کاری نمی کنه. یه پیغام میاد و اجازه ذخیره کردن فایل رو میخواد حالا 100 بار هم که بر روی yes کلیک کنی، هیچ اتفاقی نمی افته.

برنامه رو از سایت نوکیا گرفتم و فقط قسمت path ش رو تغییر دادم. برنامه اینه:


import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.file.*;
import javax.microedition.io.*;
import java.io.*;

public class WriteMIDlet extends MIDlet implements CommandListener {
private TextBox textbox;
private String photos = "fileconn.dir.photos";
private Command saveCommand;
private Command exitCommand;
private String path;

public void startApp() {
textbox = new TextBox("WriteMIDlet", "", 1000, TextField.ANY);
saveCommand = new Command("Save", Command.SCREEN, 1);
exitCommand = new Command("Exit", Command.EXIT, 1);
textbox.addCommand(saveCommand);
textbox.addCommand(exitCommand);
textbox.setCommandListener(this);
Display.getDisplay(this).setCurrent(textbox);
//path = System.getProperty(photos);
path = "file:///C:/Users/Hesam/Documents/NetBeansProjects/WriteMIDlet/";
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

private void saveFile(String path, String name) {
try {
String url = path + name;
String string = textbox.getString();
byte data[] = string.getBytes();
FileConnection fconn = (FileConnection)Connector.open(url, Connector.READ_WRITE);
if (!fconn.exists()) {
fconn.create();
}
OutputStream ops = fconn.openOutputStream();
ops.write(data);
ops.close();
fconn.close();
}
catch (IOException ioe) {
System.out.println("IOException: "+ioe.getMessage());
}
catch (SecurityException se) {
System.out.println("Security exception:" + se.getMessage());
}
}

public void commandAction(Command c, Displayable d) {
if (c == saveCommand) saveFile(path, "readme.txt");
if (c == exitCommand) this.notifyDestroyed();
}
}

pedram123
شنبه 24 مهر 1389, 19:20 عصر
آقا من یه تکست باکس دارم که توش پیام رو مینویسم. یه دکمه ذخیره هم دارم که باید پیام رو یه جایی ذخیره کنه. برای تست، آدرس فولدر رو به برنامه دادم. وقتی برنامه رو اجرا میکنم ظاهراً همه چیز خوبه ولی وقتی بر روی دکمه ذخیره کلیک میکنم سیمولاتور هیچ کاری نمی کنه. یه پیغام میاد و اجازه ذخیره کردن فایل رو میخواد حالا 100 بار هم که بر روی yes کلیک کنی، هیچ اتفاقی نمی افته.

برنامه رو از سایت نوکیا گرفتم و فقط قسمت path ش رو تغییر دادم. برنامه اینه:


import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.file.*;
import javax.microedition.io.*;
import java.io.*;

public class WriteMIDlet extends MIDlet implements CommandListener {
private TextBox textbox;
private String photos = "fileconn.dir.photos";
private Command saveCommand;
private Command exitCommand;
private String path;

public void startApp() {
textbox = new TextBox("WriteMIDlet", "", 1000, TextField.ANY);
saveCommand = new Command("Save", Command.SCREEN, 1);
exitCommand = new Command("Exit", Command.EXIT, 1);
textbox.addCommand(saveCommand);
textbox.addCommand(exitCommand);
textbox.setCommandListener(this);
Display.getDisplay(this).setCurrent(textbox);
//path = System.getProperty(photos);
path = "file:///C:/Users/Hesam/Documents/NetBeansProjects/WriteMIDlet/";
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

private void saveFile(String path, String name) {
try {
String url = path + name;
String string = textbox.getString();
byte data[] = string.getBytes();
FileConnection fconn = (FileConnection)Connector.open(url, Connector.READ_WRITE);
if (!fconn.exists()) {
fconn.create();
}
OutputStream ops = fconn.openOutputStream();
ops.write(data);
ops.close();
fconn.close();
}
catch (IOException ioe) {
System.out.println("IOException: "+ioe.getMessage());
}
catch (SecurityException se) {
System.out.println("Security exception:" + se.getMessage());
}
}

public void commandAction(Command c, Displayable d) {
if (c == saveCommand) saveFile(path, "readme.txt");
if (c == exitCommand) this.notifyDestroyed();
}
}

ادرس مورد نظر رو کامپیوتر قابل دسترسی نیست، رو موبایل تست کن

pedram123
شنبه 24 مهر 1389, 19:27 عصر
آدرس مورد نظر بر روی کامپیوتر شما وجود ندارد . روی موبایل تست کن و مطمئن باش که ادرس درست باشه

hesamy2004
یک شنبه 25 مهر 1389, 08:56 صبح
ممنون از بابت راهنماییتون.

روی موبایل مشکلی نیست، آدرس مموری رو که میدم، درسته و میتونه رو گوشی فایل رو بسازه ولی مشکل تو سیمولاتوره. وقتی رو سیمولاتور اجراش میکنم در output ش میگه :


Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.

منظور از اینکه میگه تو کامنداکشن اجراش نکن و از ترد دیگه استفاده کن رو نمیفهمم. اگه ممکنه راجع به این بهم بگید.

نکته بعد اینکه میخوام بدونم آیا میشه فایل رو از روی گوشی بخونم؟ مثلاً تو برنامه فوق یه فایل تکست در فولدر res نوشتم و با برنامه بالا تو دایرکتوری /:E موبایل ذخیرش کردم. تا اینجا برنامه انجام میشه. حالا میخوام این فایل جدید رو بخونم و با اسم دیگه ای در کنارش ذخیرش کنم (کلاً یه برنامه تسته). ولی اینکار رو دیگه انجام نمیده. آیا گوشی این اجازه رو نمیده؟ یا برنامم مشکل داره؟

pedram123
سه شنبه 27 مهر 1389, 20:36 عصر
بله شما با همون آدرس میتونید همان فایل رو بخونید
نباید مشکلی به وجود بیاد
فقط اول باید file connection رو ببندید تا file ساخته بشه