مشکل اینجاست که شما در پوشه assets میخوای بنویسی و فکر نکنم این مقدور باشه
میتونی فایل رو در حافظه کپی کنی و از اونجا خواندن و نوشتن رو انجام بدی
بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
خواندن و نوشتن در فایل xml
مدیریت گفتگو
آخرین تغییر: 12 سال پیش
با سلام من یه فایل xml دارم که تو پوشه assets ذخیره کردم میتونم از رو فایل بخونم از طریق xmlpullparserولی وقتی تغییر میدم تو فایل ذخیره نمیشه خیلی سرچ کردم و امتحان کردم نمیشه کمکم کنید خواهشا
public String readFeed(InputStream is) throws XmlPullParserException, IOException {
XmlPullParserFactory factory;
XmlPullParser parser = null;
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser = factory.newPullParser();
parser.setInput(is, null);
String dbvar;
dbvar = new String();
int eventType = parser.getEventType();
Log.i("event", "" + eventType);
while (eventType != XmlPullParser.END_DOCUMENT)
{
String tagname = parser.getName();
switch (eventType)
{
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("dbxml")) {
// create a new instance of Student
dbxml = new dbxml();
}
break;
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("dbxml")) {
// add Student object to list
// students.add(Student);
// Student.(text);
}
else if (tagname.equalsIgnoreCase("server"))
{
dbxml.setServer(text);
Log.i("server", tagname);
}
else if (tagname.equalsIgnoreCase("db"))
{
dbxml.setDb(text);
Log.i("db", tagname);
}
else if (tagname.equalsIgnoreCase("user"))
{
dbxml.setUser(text);
Log.i("user", tagname);
}
else if (tagname.equalsIgnoreCase("pass"))
{
dbxml.setPass(text);
Log.i("pass", tagname);
}
break;
default:
break;
}
eventType = parser.next();
}
return dbvar;
}
try {
// XmlPullParser parser = null;
xpp = new XMLPullParserHandle();
xpp.readFeed(getAssets().open("database.xml"));
String newxmlfile = "database.xml";
//Log.i("dir", "" + outfilename);
try {
FileOutputStream fileos = openFileOutput(newxmlfile + "database.xml", Context.MODE_WORLD_WRITEABLE);
Log.i("write", "" + fileos);
XmlSerializer xmlSerializer = Xml.newSerializer();
StringWriter writer = new StringWriter();
xmlSerializer.setOutput(writer);
xmlSerializer.startDocument("UTF-8", true);
xmlSerializer.startTag("", "dbvar");
xmlSerializer.startTag("", "dbxml");
xmlSerializer.startTag("", "server");
xmlSerializer.text(sqldb.server);
Log.i("write", sqldb.server);
xmlSerializer.endTag("", "server");
xmlSerializer.startTag("", "db");
xmlSerializer.text(sqldb.db);
Log.i("write", sqldb.db);
xmlSerializer.endTag("", "db");
xmlSerializer.startTag("", "user");
xmlSerializer.text(sqldb.user);
Log.i("write", sqldb.user);
xmlSerializer.endTag("", "user");
xmlSerializer.startTag("", "pass");
xmlSerializer.text(sqldb.pass);
Log.i("write", sqldb.pass);
xmlSerializer.endTag("", "pass");
xmlSerializer.endTag("", "dbxml");
xmlSerializer.endTag("", "dbvar");
xmlSerializer.endDocument();
xmlSerializer.flush();
String dataWrite = writer.toString();
fileos.write(dataWrite.getBytes());
Log.i("writeinfile", "" + dataWrite.getBytes());
fileos.close();
xpp.readFeed(getAssets().open("database.xml"));
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
logcat
08-12 10:44:42.651: I/server(6575): server
08-12 10:44:42.651: I/db(6575): db
08-12 10:44:42.661: I/user(6575): user
08-12 10:44:42.661: I/pass(6575): pass
08-12 10:44:42.661: I/xppkjnfdlka(6575): 10.0.2.2saa
08-12 10:44:42.661: I/LOG(6575): sql_server: 10.0.2.2, sql_db: SAHBA sql_user:sasql_pass123
08-12 10:44:42.671: I/write(6575): java.io.FileOutputStream@44f35f78
08-12 10:44:42.711: I/write(6575): 10.0.2.2
08-12 10:44:42.711: I/write(6575): SAHBA
08-12 10:44:42.711: I/write(6575): sa
08-12 10:44:42.711: I/write(6575): 123
08-12 10:44:42.711: I/writeinfile(6575): [B@44f81b98
پاسخها 1
فایل xml من ابدیت نمیشه با اینکه دستورات نوشتن من درست هست !!!نه ندیدم میشه جلسه چندم؟
نظرات
منظورتون درون extenal memory بنویسم میشه یه راهنمایی کنید؟
این کارو هم انجام دادم
java.lang.IllegalArgumentException: File /mnt/sdcard/xml-testdatabase.xml contains a path separator
این خطا رو میده نتونستم حلش کنم!!
java.lang.IllegalArgumentException: File /mnt/sdcard/xml-testdatabase.xml contains a path separator
خیلی ببخشید من رمز عبور این فایل رو نمیبینم یا پیدا نمیکنم !!!
بیشتر دقت کنید ! ، آخرین بخش اون لینک رمز عبور فایل های فشرده هست :)
ببخشید من اگه بخوام اطلاعات یوزر و پسورد دیتابیس رو در xml ذخیره کنم که اگه زمانی پسورد دیتابیس تغییر کرد همون مفهومی که تو برنامه های تحت ویندوز و اس کیوال سرور هست که بعدا در xml تغییر بدیم ....
آیا این طور مفهومی هم برا اپلیکیشن های موبایل هست یا نیاز هست که این کارو انجام بدم اگه اپلیکیشن رو نوشتم چطوری اون کاربر میتونه این تنظیمات رو انجام بده که پسورد دیتابیس تغییر کرده
میدونم خیلی سوالم رو بد پرسیدم ولی ....
خواهش میکنم ، اولا که اگه از بانک SQLite استفاده می کنید ، به طور پیشفرض قابلیت استفاده از پسورد رو نداره ، اگر قصد ذخیره کردن مقدار های تکی رو دارید ، باید از xml استفاده کنید ، اما نه xml ای که خودتون ساختید ، بلکه اندورید خودش قابلیت ذخیره در xml رو با استفاده از prefrence ها که استاد آموزش دادند ، داره ( در سر فصل ها بگردید ، نگید کدم بخش ! ) اما چون این حالت امن نیست و اگه گوشی روت باشه میشه به این مقدار ها درسترسی داشت ، پس بهتره اطلاعات حساس رو به صورت کد شده ذخیره کرد ، راحت ترین روش های کد کردن پسورد MD5 یا SHA1 هست ، در موردشون تحقیق کنید :)
ممنون آخه من به دیتابیس اس کیو ال سرور وصل میشم و فایل xml رو در sdcard ساختم بعد کاربر اطلاعات کانکت شدن به دیتابیس رو وارد میکنه و در xml ذخیره میشه و بعد از فایل خونده میشه و مراحل کانکت شدن به دیتابیس انجام میگیره این طوری درسته؟
یکم امنیت برنامه زیر سوال هست ، آموزش Shared Prefrences رو ببینید :)
ممنون لطف کردین
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام
نظرات