Android提供了5種方式存儲數(shù)據(jù)_第1頁
Android提供了5種方式存儲數(shù)據(jù)_第2頁
Android提供了5種方式存儲數(shù)據(jù)_第3頁
Android提供了5種方式存儲數(shù)據(jù)_第4頁
Android提供了5種方式存儲數(shù)據(jù)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Android提供了5種方式存儲數(shù)據(jù)-使用SharedPreferences存儲數(shù)據(jù);-文件存儲數(shù)據(jù);-SQLite數(shù)據(jù)庫存儲數(shù)據(jù);-使用ContentProvider存儲數(shù)據(jù);-網(wǎng)絡(luò)存儲數(shù)據(jù)一:使用SharedPreferences存儲數(shù)據(jù)首先說明SharedPreferences存儲方式,它是Android提供的用來存儲一些簡單配置信息的一種機制,例如:登錄用戶的用戶名與密碼。其采用了Map數(shù)據(jù)結(jié)構(gòu)來存儲數(shù)據(jù),以鍵值的方式存儲,可以簡單的讀取與寫入,具體實例如下:void ReadSharedPreferences()String strName,strPassword;SharedPre

2、ferences user = getSharedPreferences(“user_info”,0); strName = user.getString(“NAME”,”); strPassword = user getString(“PASSWORD”,”);void WriteSharedPreferences(String strName,String strPassword)SharedPreferences user = getSharedPreferences(“user_info”,0);uer.edit();user.putString(“NAME”, strName);us

3、er.putString(“PASSWORD” ,strPassword);mit();數(shù)據(jù)讀取與寫入的方法都非常簡單,只是在寫入的時候有些區(qū)別:先調(diào)用edit()使其處于編輯狀態(tài),然后才能修改數(shù)據(jù),最后使用commit()提交修改的數(shù)據(jù)。實際上SharedPreferences是采用了XML格式將數(shù)據(jù)存儲到設(shè)備中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。以上面的數(shù)據(jù)存儲結(jié)果為例,打開后可以看到一個user_info.xml的文件,打開后可以看到:<?xml version=”1.0 enco

4、ding=”UTF-8?><map><string name=”NAME”>moandroid</string><string name=” PASSWORD”>SharedPreferences</string></map>使用SharedPreferences是有些限制的:只能在同一個包內(nèi)使用,不能在不同的包之間使用。使用步驟:存數(shù)據(jù):使用SharedPreferences保存數(shù)據(jù)要經(jīng)過4個步驟:獲取對象、創(chuàng)建編輯器、修改內(nèi)容、提交修改。接下來就仔細(xì)查看這四個步驟究竟是怎樣的一個過程:1.獲取對象通過getSha

5、redPreferences()方法獲取一個SharedPreferences對象,以方便對其進(jìn)行相關(guān)操作,方法如下:getSharedPreferences("Content", Context.MODE_PRIVATE); 2.創(chuàng)建一個Editor編輯器在SharedPreferences中要編輯信息,必須取得一個編輯器,也就是Editor。Editor對象的作用是提供一些方法以便使用者修改XML文件中的內(nèi)容,如添加字符串或整數(shù)等。方法如下:SharedPreferences.edit();3.使用Editor修改內(nèi)容SharedPreferences根據(jù)方法名創(chuàng)建一個

6、<String></String>節(jié)點,根據(jù)這個方法的參數(shù)向節(jié)點中添加內(nèi)容。方法如下:putString("String", data);4.提交內(nèi)容將數(shù)據(jù)修改好之后,也就是putString()或其他put()方法執(zhí)行完后,要將這個修改提交給SharedPreferences,以通知其將內(nèi)容寫入到XML文件中。使用的方法如下:mit();讀數(shù)據(jù):只要兩個步驟就可以順利取出保存的數(shù)據(jù)并使用:1.獲得SharedPreferences對象獲得的方法如下:getSharedPreferences("Content", Context.

7、MODE_PRIVATE); 2.取出Key對應(yīng)的Value即內(nèi)容我們只要使用getString()等方法就可以了:SharedPreferences.getString()SharedPreferences.getBoolean()SharedPreferences.getFloat()SharedPreferences.getInt()SharedPreferences.getLong()二:文件存儲數(shù)據(jù)文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實現(xiàn)I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法

8、來讀取設(shè)備上的文件。FilterInputStream, FilterOutputStream等可以到Java io package說明中去詳細(xì)學(xué)習(xí),不再此詳細(xì)說明,具體實例如下:String fn = “moandroid.log”;FileInputStream fis = openFileInput(fn);FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE);除此之外,Android還提供了其他函數(shù)來操作文件,詳細(xì)說明請閱讀android sdk。1.文件保存在哪里事實上,文件保存的路徑與SharedPrefere

9、nces的保存路徑差不多,位于/data/data/<package name>/files下。2.文件操作的一些方法知道文件保存的位置和形式后,接下來需要知道操作文件的一些重要的方法,如表所示:操作文件的重要方法含義openFileInput()打開應(yīng)用程序文件以便讀取openFileOutput()創(chuàng)建應(yīng)用程序文件以便寫入deleteFile()通過名稱刪除文件fileList()獲得所有位于/data/data/<package name>/files下的文件列表getFileDir()獲得/data/data/<package name>/files

10、子目錄對象getCacheDir()獲得/data/data/<package name>/cache子目錄對象getDir()根據(jù)名稱創(chuàng)建或獲取一個子目錄在程序默認(rèn)位置創(chuàng)建和寫入文件我們知道在Java中通過使用流來讀寫文件,要創(chuàng)建一個文件首先要建立一個輸出流。在Android中同樣如此,我們依靠openFileOutput()來獲得一個輸出流。它將在上一節(jié)中展示的位置創(chuàng)建一個文件,使用一個流要3個步驟:1.獲得一個輸出流對象獲得一個輸出流對象以進(jìn)行文件操作,使用openFileOutput()方法可以很方便的獲得,如下所示:openFileOutput(“myFile.txt”,

11、Context.MODE_PRIVATE);2.向流中寫入數(shù)據(jù)獲得了輸出流之后我們需要向流中添加我們需要添加的信息了,同樣非常方便,使用write()方法就可以了:write(data.getBytes();3.關(guān)閉流當(dāng)數(shù)據(jù)寫入完畢后,使用close()方法可以關(guān)閉輸出流,方法如下所示:fos.close();在默認(rèn)位置讀取文件與上面類似,Android提供了讀取文件的簡便方法,同樣需要3個步驟:1. 創(chuàng)建輸入流首先,得到了一個輸入字節(jié)流,參數(shù)是文件名。fis = openFileInput(“myFile”);接著,將其轉(zhuǎn)換為字符流,這樣可以一個字符一個字符地讀取以便顯示中文。isr = n

12、ew InputStreamReader(fis);br = new BufferedReader(isr);最后,我們又將其包裝為緩沖流,這樣可以一段一段地讀取,減少讀寫的次數(shù),保護(hù)硬盤。2. 讀取數(shù)據(jù)從流中獲得數(shù)據(jù)同樣非常方便,這里沒有使用read()方法而使用了readLine()方法,原因下文也會給出,代碼如下:String s = null;S = (br.readLine();3. 關(guān)閉輸入流這里記得每個流都要關(guān)閉哦:fis.close();isr.close();br.close();三SQLite數(shù)據(jù)庫本節(jié)將講解使用Android自帶的關(guān)系型數(shù)據(jù)庫SQLite。它是一個基于文件

13、的輕量級數(shù)據(jù)庫,為嵌入式設(shè)備量身打造而成。每個應(yīng)用程序創(chuàng)建的數(shù)據(jù)庫都是私有的,但是ContentProvider可以把數(shù)據(jù)共享給其他的應(yīng)用程序。本節(jié)中讀者將學(xué)習(xí)到創(chuàng)建和刪除數(shù)據(jù)庫,創(chuàng)建和刪除表,以及插入記錄、更新記錄、刪除記錄和查詢記錄等操作。1.怎樣創(chuàng)建數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫有多種方法,最簡單的無疑是使用Context的openOrCreateDatabase()方法了。當(dāng)然還有更加強大的方法,比如通過SQLiteOpenHelper類更有效地管理它。使用openOrCreateDatabase()方法創(chuàng)建數(shù)據(jù)庫語法格式如下:ContextWrapper.openOrCreateDatabase(

14、String name, int mode, CursorFactory factory)2.數(shù)據(jù)庫文件被保存在哪里事實上,與SharedPreferences類似,數(shù)據(jù)庫文件被保存在如下的目錄下:/data/data/package name/databases3. 設(shè)置數(shù)據(jù)庫創(chuàng)建完數(shù)據(jù)庫后,為了更安全而有效地使用它,我們還需要對它進(jìn)行一定的配置,主要的方法有3個,分別是:(1)設(shè)置本地化:db.setLocale(Locale.getDefault();(2)設(shè)置線程安全鎖:db.setLockingEnabled(true);(3)設(shè)置版本:db.setVersion(1);4.關(guān)閉數(shù)據(jù)

15、庫當(dāng)我們不再需要使用數(shù)據(jù)庫時可以考慮將其關(guān)閉,關(guān)閉的方法非常簡單,只需要調(diào)用方法:db.close();5.刪除數(shù)據(jù)庫有些時候基于某種需求我們需要將數(shù)據(jù)庫徹底刪除,方法同樣非常簡單:Context.deleteDatabase();創(chuàng)建和刪除表1. 創(chuàng)建表創(chuàng)建了數(shù)據(jù)庫之后,我們接下來的工作就是在數(shù)據(jù)庫中創(chuàng)建表了,只有擁有了表,數(shù)據(jù)庫才有意義。創(chuàng)建表的方法是執(zhí)行相應(yīng)的SQL語句。例如,要創(chuàng)建一個名為userInfo_brief的表,需要的SQL語句為:CREATE TABLE userInfo_brief (id INTEGER PRIMARY KEY AUTOINCREMENT,name TE

16、XT,password TEXT);創(chuàng)建person表db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");2. 刪除表相應(yīng)的,如果要刪除表userInfo_brief ,其SQL語句為:DROP TABLE userInfo_brief;與其對應(yīng)的Java代碼為:Sring sql = “DROP TABLE ”+ TABLENAME_1 + “;”;db.execSQL(sql)操作記錄操作記錄大致為插入操作、更新操作以及

17、刪除操作。SQLiteDatabase類提供了3個簡單的方法來完成對應(yīng)的操作,它們分別是:SQLiteDatabase.insert() SQLiteDatabase.update()SQLiteDatabase.delete()1. 插入記錄插入記錄時,我們需要使用方法:SQLiteDatabase.insert(String table, String nullColumnHack, ContentValues values)/ContentValues以鍵值對的形式存放數(shù)據(jù)ContentValues cv = new ContentValues();cv.put("name&q

18、uot;, );cv.put("age", person.age);/插入ContentValues中的數(shù)據(jù)db.insert("person", null, cv);2. 更新記錄更新記錄時,我們需要使用方法:SQLiteDatabase.update(String table, ContentValues values, String whereClause, String whereArgs)3. 刪除記錄刪除記錄時,我們需要使用方法:SQLiteDatabase.delete(String table, String whe

19、reClause, String whereArgs)1. 使用query()查詢方法查詢數(shù)據(jù):Cursor c = db.rawQuery("SELECT * FROM person WHERE age >= ?", new String"33");while (c.moveToNext() int _id = c.getInt(c.getColumnIndex("_id");String name = c.getString(c.getColumnIndex("name");int age = c.get

20、Int(c.getColumnIndex("age");c.close();/刪除數(shù)據(jù)db.delete("person", "age < ?", new String"35");/關(guān)閉當(dāng)前數(shù)據(jù)庫db.close();/刪除test.db數(shù)據(jù)庫/deleteDatabase("test.db");SQLite數(shù)據(jù)庫提供了一些方法可以使我們很方便的執(zhí)行查詢,而避免了寫一些繁瑣的SELECT查詢語句,當(dāng)然,你也不必?fù)?dān)心,因為它提供的方法其實與SELECT語句一脈相承。其語法格式如下:SQLit

21、eDatabase.query(String table, String columns, String selection, String selectionArgs, String groupBy, String having, String orderBy)2. 使用Cursor對象保存查詢結(jié)果Cursor對象只能暫時地保存數(shù)據(jù),如果只需要完成一些簡單的操作可以快速地執(zhí)行,執(zhí)行完后關(guān)閉它。接下來學(xué)習(xí)一些經(jīng)常使用的Cursor對象的方法;(1)Cursor.getCount()獲得Cursor對象中記錄條數(shù),可以理解為有幾行。(2)Cursor.getColumnCount(),獲得Cur

22、sor對象中記錄的屬性個數(shù),可以理解為有幾列。(3)Cursor.moveToFirst(),將Cursor對象的指針指向第一條記錄。(4)Cursor.moveToNext(),將Cursor對象的指針指向嚇一跳。(5)Cursor.isAfterLast(),判斷Cursor對象的指針是否指向最后一條記錄。(6)Cursor.close(),關(guān)閉Cursor對象。(7)Cursor.deactivate(),取消激活狀態(tài)。(8)Cursor.requery(),重新查詢刷新數(shù)據(jù)。3. 執(zhí)行查詢操作4. 使用SQLiteQueryBuilder如果我們需要執(zhí)行多表查詢就要使用SQLiteQu

23、eryBuilder,接下來我們需要執(zhí)行多表查詢:SELECT user_,User_brief.password,User_detail.age,User_detail.sexFROMuser_brief, user_detailWHERE user_ = user_ AND user_ = “wes”O(jiān)RDERBY age ASC為了能更好地管理數(shù)據(jù)庫,Android SDK為我們提供了數(shù)據(jù)庫的一個幫助類SQLiteOpenHelper。要使用SQLiteOpenHelper類需要如下步驟:1.繼承SQLit

24、eOpenHelper類2. 得到幫助類的對象通過幫助類的構(gòu)造方法可以順利地得到幫助類的對象:DatabaseHelper helper = new DatabaseHelper(Context context, String name, CursorFactory factory, int version)3. 獲得數(shù)據(jù)庫順利地獲得數(shù)據(jù)庫幫助類的對象后,無論在什么時候,我們都可以很方便地得到一個可讀或者可寫數(shù)據(jù)庫,得到可寫數(shù)據(jù)庫的具體語法格式如下:SQLiteOpenHelper.getWritableDatabase()或者可以通過以下方法得到可讀數(shù)據(jù)庫:SQLiteOpenHelper.

25、getReadableDatabase()事務(wù)的操作public void add(List<Person> persons) db.beginTransaction();/開始事務(wù) try for (Person person : persons) db.execSQL("INSERT INTO person VALUES(null, ?, ?, ?)", new O, person.age, ); db.setTransactionSuccessful();/設(shè)置事務(wù)成功完成 finally db.end

26、Transaction();/結(jié)束事務(wù) 四:ContentProvider1、ContentProvider簡介當(dāng)應(yīng)用繼承ContentProvider類,并重寫該類用于提供數(shù)據(jù)和存儲數(shù)據(jù)的方法,就可以向其他應(yīng)用共享其數(shù)據(jù)。雖然使用其他方法也可以對外共享數(shù)據(jù),但數(shù)據(jù)訪問方式會因數(shù)據(jù)存儲的方式而不同,如:采用文件方式對外共享數(shù)據(jù),需要進(jìn)行文件操作讀寫數(shù)據(jù);采用sharedpreferences共享數(shù)據(jù),需要使用sharedpreferences API讀寫數(shù)據(jù)。而使用ContentProvider共享數(shù)據(jù)的好處是統(tǒng)一了數(shù)據(jù)訪問方式。2、Uri類簡介Uri代表了要操作的數(shù)據(jù),Uri主要包含了兩部分

27、信息:1.需要操作的ContentProvider ,2.對ContentProvider中的什么數(shù)據(jù)進(jìn)行操作,一個Uri由以下幾部分組成:1.scheme:ContentProvider(內(nèi)容提供者)的scheme已經(jīng)由Android所規(guī)定為:content:/。2.主機名(或Authority):用于唯一標(biāo)識這個ContentProvider,外部調(diào)用者可以根據(jù)這個標(biāo)識來找到它。3.路徑(path):可以用來表示我們要操作的數(shù)據(jù),路徑的構(gòu)建應(yīng)根據(jù)業(yè)務(wù)而定,如下:要操作contact表中id為10的記錄,可以構(gòu)建這樣的路徑:/contact/10要操作contact表中id為10的記錄的na

28、me字段, contact/10/name要操作contact表中的所有記錄,可以構(gòu)建這樣的路徑:/contact?要操作的數(shù)據(jù)不一定來自數(shù)據(jù)庫,也可以是文件等其他存儲方式,如下:要操作xml文件中contact節(jié)點下的name節(jié)點,可以構(gòu)建這樣的路徑:/contact/name如果要把一個字符串轉(zhuǎn)換成Uri,可以使用Uri類中的parse()方法,如下:Uri uri = Uri.parse("content:/vider.contactprovider/contact")3、UriMatcher、ContentUrist和Conten

29、tResolver簡介因為Uri代表了要操作的數(shù)據(jù),所以我們很經(jīng)常需要解析Uri,并從Uri中獲取數(shù)據(jù)。Android系統(tǒng)提供了兩個用于操作Uri的工具類,分別為UriMatcher 和ContentUris 。掌握它們的使用,會便于我們的開發(fā)工作。UriMatcher:用于匹配Uri,它的用法如下:1.首先把你需要匹配Uri路徑全部給注冊上,如下:/常量UriMatcher.NO_MATCH表示不匹配任何路徑的返回碼(-1)。UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);/如果match()方法匹配content:/c

30、vider.contactprovider/contact路徑,返回匹配碼為1uriMatcher.addURI(“vider.contactprovider”, “contact”, 1);/添加需要匹配uri,如果匹配就會返回匹配碼/如果match()方法匹配 content:/vider.contactprovider/contact/230路徑,返回匹配碼為2uriMatcher.addURI(“com.changcheng.sqlite.

31、provider.contactprovider”, “contact/#”, 2);/#號為通配符2.注冊完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法對輸入的Uri進(jìn)行匹配,如果匹配就返回匹配碼,匹配碼是調(diào)用addURI()方法傳入的第三個參數(shù),假設(shè)匹配content:/vider.contactprovider/contact路徑,返回的匹配碼為1。ContentUris:用于獲取Uri路徑后面的ID部分,它有兩個比較實用的方法:withAppendedId(uri, id)用于為路徑加上ID部分parse

32、Id(uri)方法用于從路徑中獲取ID部分ContentResolver:當(dāng)外部應(yīng)用需要對ContentProvider中的數(shù)據(jù)進(jìn)行添加、刪除、修改和查詢操作時,可以使用ContentResolver 類來完成,要獲取ContentResolver 對象,可以使用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,來操作數(shù)據(jù)。1.什么是ContentProviderContentProvider機制可以幫助開發(fā)者在多個應(yīng)用中操作數(shù)據(jù),包括存儲、修改和刪除等。這也是在應(yīng)用間共享數(shù)據(jù)的唯一

33、方式。一個ContentProvider類實現(xiàn)了一組標(biāo)準(zhǔn)的接口,它們是:(1)ContentProvider.insert(Uri arg0, ContentValues arg1)(2)ContentProvider.query(Uri arg0, String arg1, String arg2, String arg3, String arg4)(3)ContentProvider.update(Uri arg0, ContentValues arg1, String arg2, String arg3)(4)ContentProvider.delete(Uri arg0, String

34、 arg1, String arg2)(5)ContentProvider.getType(Uri arg0)2. 什么是URIURI是Universal Resource Identifier的縮寫,也就是通用資源標(biāo)志符的意思。它的作用就是告訴使用者,數(shù)據(jù)的具體位置,所以在URI中一定包含有數(shù)據(jù)的路徑。事實上,在Android的Uri中主要包括3個部分:(1)“content:/”,Android命名機制規(guī)定所有的內(nèi)容提供者Uri必須以“content:/”開頭。(2)數(shù)據(jù)路徑,正如前文所說,通過該路徑其他的應(yīng)用程序可以順利地找到具體數(shù)據(jù)。(3)ID,這個是可選的,如果不填表示取得所有的數(shù)據(jù)

35、。3. ContentResolverAndroid的數(shù)據(jù)共享機制中,ContentProvider作為提供者出現(xiàn),而ContentResolver則作為消費者出現(xiàn)。通過getContentResolver()可以得到當(dāng)前應(yīng)用的ContentResolver對象。要實現(xiàn)一個ContentResolver同樣需要實現(xiàn)5個接口,與ContentProvider一一對應(yīng):(1)ContentResolver. delete(Uri url,String where,String selectionArgs)(2)ContentResolver .update(Uri uri,ContentValue

36、svalues,Stringwhere,StringselectionArgs)(3)ContentResolver.query(Uriuri,Stringprojection,Stringselection,StringselectionArgs,String sortOrder)(4)ContentResolver. insert(Uri url,ContentValues values) (5)ContentResolver. getType(Uri url)獲得手機中聯(lián)系人的實例:(1)查詢聯(lián)系人列表獲得Cursor對象,方法為:managedQuery(Uri uri, String

37、 projection, String selection, String selectionArgs, String sortOrder) (2)新建Adapter: ListAdapter adapter = new SimpleCursorAdapter(Context context, int layout, Cursor c, String from, int to)(3)設(shè)置Adapter setListAdapter(adapter);private StringBuilder getContacts()   StringBuilder  sbLog

38、 = new StringBuilder();           / 得到ContentResolver對象              ContentResolver cr =this.getContentResolver();           

39、0;    / 取得電話本中開始一項的光標(biāo),主要就是查詢"contacts"表           Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);         if(!cursor.moveToFirst()  &#

40、160;          sbLog.append("獲取內(nèi)容為空!");             return sbLog;                 if(cursor.moveToFirst() 

41、                                                   

42、;     / 取得聯(lián)系人名字(顯示出來的名字),實際內(nèi)容在ContactsContract.Contacts中   int nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);                  String name = cursor.getString

43、(nameIndex);              sbLog.append("name=" + name + "");                          

44、;    / 取得聯(lián)系人ID   String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID);                           &#

45、160;     / 根據(jù)聯(lián)系人ID查詢對應(yīng)的電話號碼               Cursor phoneNumbers = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "  

46、                       + contactId, null, null);                       

47、0;    / 取得電話號碼(可能存在多個號碼)                  while (phoneNumbers.moveToNext()                      

48、;               String strPhoneNumber = phoneNumbers.getString(phoneNumbers.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);               &#

49、160;      sbLog.append("Phone=" + strPhoneNumber + "");                                 phoneNumbers

50、.close();                               / 根據(jù)聯(lián)系人ID查詢對應(yīng)的email               Cursor

51、 emails = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = "                         + contactId

52、, null, null);                            / 取得email(可能存在多個email)                 

53、; while (emails.moveToNext()                                     String strEmail = emails.getString(emails.getColumnIndex(Con

54、tactsContract.CommonDataKinds.Email.DATA);                      sbLog.append("Email=" + strEmail + "");            

55、                     emails.close();                                      cursor.close();           Log.e("-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論