项目地址:点击打开

项目简介:写文件到android外置存储器的一个帮助类,和它的demo程序

它是如何工作的呢?

1.创建 AppExternalFileWriter 对象并传递context(上下文);

2.按照你的要求使用 writeDataToFile 或者 writeDataToTimeStampedFile 不同的方法;

3.如果你想写入的文件需要有时间标注的数据,那么使用writeDataToTimeStampedFile类型

4.如果你想创建一个下级目录,那么可以使用灵活的 createSubDirectory类型

5.如果外置存储设比有任何的问题,比如设备没有挂载,作为大容量存储设备,空间容量不足,或者甚至是创建一个已经存在的库文件,该类运行的时候会抛出一个ExternalFileWriterException异常信息。

6.如果你想在外部缓存中写入数据,那么做如下操作:

*检查所有方法的变体(variants),它需要一个boolean类型的参数,如果你传进一个true值,文件操作在cpu缓存中已经完成了,否则将在标准外部存储器中完成。

*如果你在cpu缓存中已经通过createDirectory方法创建了一个目录,把这个目录传递给任何父类需要的方法。这些方法不管父类是在外置存储器或者cpu缓存中工作是一样的。

7.检查某些目录或者文件是否存在某些位置或者不借助isFileExists、isDirectoryExists方法。

8.用deleteDirectory方法删除整个目录。(注意:该方法之关心删除整个目录与它相关的上级目录,如果您想要检查目录是否为空并使用一些错误的消息,我推荐使用 File.delete() 方法。)

关于Variants的描述

1.writeDataToFile--没有父级目录

  1. writeDataToFile(String fileName, byte[] data,boolean inCache);
  2. writeDataToFile(String fileName, String data,boolean inCache);

在程序的目录将数据写入自定义的文件

a.writeDataToFile---在父级路径

  1. writeDataToFile(File parent, String fileName, byte[] data);
  2. writeDataToFile(File parent, String fileName, String data);

b.在其他的路径写入数据到自定义文件名称

b1 writeDataToTimeStampedFile方法---没有父级路径

  1. writeDataToTimeStampedFile(String extension, byte[] data,boolean inCache)
  2. writeDataToTimeStampedFile(String extension, String data,boolean inCache)

b2 writeDataToTimeStampedFile方法----带有父级路径

  1. writeDataToTimeStampedFile(String extension, byte[] data)
  2. writeDataToTimeStampedFile(String extension, String data)

在其他目录下写入数据到指定文件,并伴有时间标识扩展

c1 createSubDirectory方法

  1. createSubDirectory(File parent, String directoryName)

在其他目录下创建上级目录

  1. createSubDirectory(String directoryName,boolean inCache)

在应用程序目录创建上级目录

isDirectoryExists方法

  1. isDirectoryExists(String directoryName, boolean checkInCache)

检查赋予的目录名称是否存在在程序目录下或者缓存目录

  1. isDirectoryExists(String directoryName, File parentDirectory)

检查给予名称的目录是否存在与父路径

a isFileExists 方法

  1. isFileExists(String fileName, boolean checkInCache)

检查给予的文件名称是否存在在程序目录下(parentDirectory )

  1. isFileExists(String fileName, File parentDirectory)

删除目录

  1. deleteDirectory(File directory)

删除指定指定的目录和它上级的所有文件(翻译的还是很别扭)

一些好的建议(some goodies)

  1. 1.getAppDirectory() : 创建app目录的文件对象
  2.  
  3. 2.getExternalStorageDirectory() : 获取外置存储目录文件对象
  4.  
  5. 3.getExternalCacheDirectory() : 获取外置缓存目录对象

完整类的AppExternalFileWriter.java

  1. package com.example.filewrite;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6.  
  7. import android.content.Context;
  8. import android.os.Environment;
  9. import android.os.StatFs;
  10. import android.text.TextUtils;
  11.  
  12. /**
  13. * @author Prasham Trivedi
  14. * @version 2.5
  15. * <p>
  16. * This class will create a directory having same name as your
  17. * application. With all the states handled and reported back to
  18. * developer.
  19. * </p>
  20. */
  21. public class AppExternalFileWriter {
  22.  
  23. private static final String canNotWriteFile = "Can not write file: ";
  24. private static final String canNotCreateDirectory = "Can not create directory: ";
  25. private final File externalStorageDirectory;
  26. private final File externalCacheDirectory;
  27. private Context context;
  28. private File appDirectory;
  29. private File appCacheDirectory;
  30.  
  31. /**
  32. * Creates external file writer
  33. *
  34. * @param context
  35. * : Context
  36. */
  37. public AppExternalFileWriter(Context context) {
  38. this.context = context;
  39. externalStorageDirectory = Environment.getExternalStorageDirectory();
  40. externalCacheDirectory = context.getExternalCacheDir();
  41.  
  42. }
  43.  
  44. private File createFile(String fileName, boolean inCache)
  45. throws ExternalFileWriterException {
  46. return createFile(fileName, getAppDirectory(inCache));
  47. }
  48.  
  49. /**
  50. * Create a file in the app directory with given file name.
  51. *
  52. * @param fileName
  53. * : Desired name of the file
  54. * @param parent
  55. * parent of the file
  56. *
  57. * @return : File with desired name
  58. */
  59. private File createFile(String fileName, File parent)
  60. throws ExternalFileWriterException {
  61. if (isExternalStorageAvailable(true)) {
  62. try {
  63.  
  64. if (parent.isDirectory()) {
  65.  
  66. File detailFile = new File(parent, fileName);
  67. if (!detailFile.exists())
  68. detailFile.createNewFile();
  69. else {
  70. String messege = "File already there ";
  71. throwException(messege);
  72. }
  73. return detailFile;
  74. } else {
  75. throwException(parent + " should be a directory");
  76. }
  77. } catch (IOException e) {
  78. e.printStackTrace();
  79. String errorMessege = "IOException " + e;
  80. throwException(errorMessege);
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. String errorMessege = "Exception " + e;
  84. throwException(errorMessege);
  85. }
  86. }
  87. return null;
  88. }
  89.  
  90. /** Creates app directory */
  91. private void createAppDirectory() throws ExternalFileWriterException {
  92. String directoryName = context
  93. .getString(context.getApplicationInfo().labelRes);
  94.  
  95. if (isExternalStorageAvailable(false)) {
  96.  
  97. appDirectory = new File(Environment.getExternalStorageDirectory()
  98. .toString(), directoryName);
  99. createDirectory(appDirectory);
  100.  
  101. appCacheDirectory = new File(externalCacheDirectory, directoryName);
  102. createDirectory(appCacheDirectory);
  103.  
  104. }
  105.  
  106. }
  107.  
  108. private double getAvailableSpace() {
  109. StatFs stat = new StatFs(Environment.getExternalStorageDirectory()
  110. .getPath());
  111. double sdAvailSize = (double) stat.getAvailableBlocks()
  112. * (double) stat.getBlockSize();
  113. return sdAvailSize;
  114. }
  115.  
  116. private boolean isExternalStorageAvailable(boolean isForFile)
  117. throws ExternalFileWriterException {
  118. String errorStarter = (isForFile) ? canNotWriteFile
  119. : canNotCreateDirectory;
  120.  
  121. String storageState = Environment.getExternalStorageState();
  122.  
  123. if (storageState.equals(Environment.MEDIA_MOUNTED)) {
  124. return true;
  125. } else if (storageState.equals(Environment.MEDIA_BAD_REMOVAL)) {
  126. throwException(errorStarter
  127. + "Media was removed before it was unmounted.");
  128. } else if (storageState.equals(Environment.MEDIA_CHECKING)) {
  129. throwException(errorStarter
  130. + "Media is present and being disk-checked, "
  131. + "Please wait and try after some time");
  132. } else if (storageState.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
  133. throwException(errorStarter + "Presented Media is read only");
  134. } else if (storageState.equals(Environment.MEDIA_NOFS)) {
  135. throwException(errorStarter + "Blank or unsupported file media");
  136. } else if (storageState.equals(Environment.MEDIA_SHARED)) {
  137. throwException(errorStarter
  138. + "Media is shared with USB mass storage");
  139. } else if (storageState.equals(Environment.MEDIA_REMOVED)) {
  140. throwException(errorStarter + "Media is not present");
  141. } else if (storageState.equals(Environment.MEDIA_UNMOUNTABLE)) {
  142. throwException(errorStarter
  143. + "Media is present but cannot be mounted");
  144. } else if (storageState.equals(Environment.MEDIA_UNMOUNTED)) {
  145. throwException(errorStarter + "Media is present but not mounted");
  146. }
  147.  
  148. return false;
  149. }
  150.  
  151. private void throwException(String errorMessege)
  152. throws ExternalFileWriterException {
  153. throw new ExternalFileWriterException(errorMessege);
  154. }
  155.  
  156. private File createDirectory(File directory)
  157. throws ExternalFileWriterException {
  158. if (!directory.exists() || !directory.isDirectory()) {
  159. if (directory.mkdirs()) {
  160. String messege = "directory " + directory + " created : Path "
  161. + directory.getPath();
  162. System.out.println(messege);
  163.  
  164. } else {
  165. if (directory.exists()) {
  166. if (directory.isDirectory()) {
  167. String messege = "directory " + directory
  168. + " Already exists : Path "
  169. + directory.getPath();
  170. System.out.println(messege);
  171. } else {
  172. String messege = directory
  173. + "should be a directory but found a file : Path "
  174. + directory.getPath();
  175. throwException(messege);
  176. System.out.println(messege);
  177. }
  178.  
  179. }
  180. }
  181. }
  182. return directory;
  183. }
  184.  
  185. /**
  186. * Write byte array to file. Will show error if given file is a directory.
  187. *
  188. * @param file
  189. * : File where data is to be written.
  190. * @param data
  191. * String which you want to write a file. If size of this is
  192. * greater than size available, it will show error.
  193. */
  194. private void writeDataToFile(File file, String data)
  195. throws ExternalFileWriterException {
  196. byte[] stringBuffer = data.getBytes();
  197. writeDataToFile(file, stringBuffer);
  198. }
  199.  
  200. /**
  201. * Write byte array to file. Will show error if given file is a directory.
  202. *
  203. * @param file
  204. * : File where data is to be written.
  205. * @param data
  206. * byte array which you want to write a file. If size of this is
  207. * greater than size available, it will show error.
  208. */
  209. private void writeDataToFile(File file, byte[] data)
  210. throws ExternalFileWriterException {
  211. if (isExternalStorageAvailable(true)) {
  212. if (file.isDirectory()) {
  213. throwException(file
  214. + " is not a file, can not write data in it");
  215. } else {
  216. if (file != null && data != null) {
  217. double dataSize = data.length;
  218. double remainingSize = getAvailableSpace();
  219. if (dataSize >= remainingSize) {
  220. throwException("Not enough size available");
  221.  
  222. } else {
  223. try {
  224. FileOutputStream out = new FileOutputStream(file);
  225. out.write(data);
  226. out.close();
  227. } catch (IOException e) {
  228. e.printStackTrace();
  229. } catch (Exception e) {
  230. e.printStackTrace();
  231. }
  232. }
  233. }
  234.  
  235. }
  236. }
  237. }
  238.  
  239. private File getAppDirectory(boolean inCache) {
  240. return (inCache) ? this.appCacheDirectory : this.appDirectory;
  241. }
  242.  
  243. /**
  244. * Creates subdirectory in application directory
  245. *
  246. * @param directoryName
  247. * name of subdirectory
  248. *
  249. * @return File object of created subdirectory
  250. *
  251. * @throws ExternalFileWriterException
  252. * if external storage is not available
  253. */
  254. public File createSubDirectory(String directoryName, boolean inCache)
  255. throws ExternalFileWriterException {
  256. if (isExternalStorageAvailable(false)) {
  257.  
  258. getAppDirectory();
  259.  
  260. File subDirectory = new File(getAppDirectory(inCache),
  261. directoryName);
  262.  
  263. return createDirectory(subDirectory);
  264. } else
  265. return null;
  266. }
  267.  
  268. /**
  269. * Checks whether directory with given name exists in AppDirectory
  270. *
  271. * @param directoryName
  272. * : Name of the directory to check.
  273. *
  274. * @return true if a directory with "directoryName" exists, false otherwise
  275. */
  276. public boolean isDirectoryExists(String directoryName, boolean checkInCache) {
  277. File parentDirectory = (checkInCache) ? appCacheDirectory
  278. : appDirectory;
  279. return isDirectoryExists(directoryName, parentDirectory);
  280. }
  281.  
  282. /**
  283. * Check whether file with given name exists in parentDirectory or not.
  284. *
  285. * @param fileName
  286. * : Name of the file to check.
  287. * @param parentDirectory
  288. * : Parent directory where directory with "fileName" should be
  289. * present
  290. *
  291. * @return true if a file with "fileName" exists, false otherwise
  292. */
  293. public boolean isFileExists(String fileName, File parentDirectory) {
  294. File directoryToCheck = new File(parentDirectory, fileName);
  295. return directoryToCheck.exists() && directoryToCheck.isFile();
  296. }
  297.  
  298. /**
  299. * Checks whether file with given name exists in AppDirectory
  300. *
  301. * @param fileName
  302. * : Name of the file to check.
  303. *
  304. * @return true if a file with "directoryName" exists, false otherwise
  305. */
  306. public boolean isFileExists(String fileName, boolean checkInCache) {
  307. File parentDirectory = (checkInCache) ? appCacheDirectory
  308. : appDirectory;
  309. return isFileExists(fileName, parentDirectory);
  310. }
  311.  
  312. /**
  313. * Check whether directory with given name exists in parentDirectory or not.
  314. *
  315. * @param directoryName
  316. * : Name of the directory to check.
  317. * @param parentDirectory
  318. * : Parent directory where directory with "directoryName" should
  319. * be present
  320. *
  321. * @return true if a directory with "directoryName" exists, false otherwise
  322. */
  323. public boolean isDirectoryExists(String directoryName, File parentDirectory) {
  324. File directoryToCheck = new File(parentDirectory, directoryName);
  325. return directoryToCheck.exists() && directoryToCheck.isDirectory();
  326. }
  327.  
  328. /**
  329. * Creates subdirectory in parent directory
  330. *
  331. * @param parent
  332. * : Parent directory where directory with "directoryName" should
  333. * be created
  334. * @param directoryName
  335. * name of subdirectory
  336. *
  337. * @return File object of created subdirectory
  338. *
  339. * @throws ExternalFileWriterException
  340. * if external storage is not available
  341. */
  342. public File createSubDirectory(File parent, String directoryName)
  343. throws ExternalFileWriterException {
  344. if (isExternalStorageAvailable(false)) {
  345.  
  346. getAppDirectory();
  347.  
  348. if (!parent.isDirectory())
  349. throwException(parent.getName() + " Must be a directory ");
  350.  
  351. File subDirectory = new File(parent, directoryName);
  352.  
  353. return createDirectory(subDirectory);
  354. } else
  355. return null;
  356. }
  357.  
  358. /**
  359. * Deletes given directory with all its subdirectories and its files.
  360. *
  361. * @param directory
  362. * : Directory to delete
  363. */
  364. public void deleteDirectory(File directory) {
  365. if (directory != null) {
  366. if (directory.isDirectory())
  367. for (File child : directory.listFiles()) {
  368.  
  369. if (child != null) {
  370. if (child.isDirectory())
  371. deleteDirectory(child);
  372. else
  373. child.delete();
  374. }
  375. }
  376.  
  377. directory.delete();
  378. }
  379. // return false;
  380. }
  381.  
  382. /**
  383. * Get created app directory
  384. *
  385. * @return File object of created AppDirectory
  386. */
  387. public File getAppDirectory() throws ExternalFileWriterException {
  388. if (appDirectory == null) {
  389. createAppDirectory();
  390. }
  391. return appDirectory;
  392. }
  393.  
  394. /**
  395. * get External Cache directory
  396. *
  397. * @return File object of External Cache directory
  398. */
  399. public File getExternalCacheDirectory() {
  400. return externalCacheDirectory;
  401. }
  402.  
  403. /**
  404. * Get external storage directory
  405. *
  406. * @return File object of external storage directory
  407. */
  408. public File getExternalStorageDirectory() {
  409. return externalStorageDirectory;
  410. }
  411.  
  412. /**
  413. * Write data in file of a parent directory
  414. *
  415. * @param parent
  416. * parent directory
  417. * @param fileName
  418. * desired filename
  419. * @param data
  420. * data
  421. *
  422. * @throws ExternalFileWriterException
  423. * if external storage is not available or free space is less
  424. * than size of the data
  425. */
  426. public void writeDataToFile(File parent, String fileName, byte[] data)
  427. throws ExternalFileWriterException {
  428. if (isExternalStorageAvailable(true)) {
  429. getAppDirectory();
  430.  
  431. File file = createFile(fileName, parent);
  432.  
  433. writeDataToFile(file, data);
  434. }
  435. }
  436.  
  437. /**
  438. * Writes data to the file. The file will be created in the directory name
  439. * same as app.
  440. *
  441. * @param fileName
  442. * name of the file
  443. * @param data
  444. * data to write
  445. *
  446. * @throws ExternalFileWriterException
  447. * if external storage is not available or free space is less
  448. * than size of the data
  449. */
  450. public void writeDataToFile(String fileName, String data, boolean inCache)
  451. throws ExternalFileWriterException {
  452. if (isExternalStorageAvailable(true)) {
  453. getAppDirectory();
  454.  
  455. File file = createFile(fileName, inCache);
  456.  
  457. writeDataToFile(file, data);
  458. }
  459. }
  460.  
  461. /**
  462. * Writes data to the file. The file will be created in the directory name
  463. * same as app.
  464. *
  465. * @param fileName
  466. * name of the file
  467. * @param data
  468. * data to write
  469. *
  470. * @throws ExternalFileWriterException
  471. * if external storage is not available or free space is less
  472. * than size of the data
  473. */
  474. public void writeDataToFile(String fileName, byte[] data, boolean inCache)
  475. throws ExternalFileWriterException {
  476. if (isExternalStorageAvailable(true)) {
  477. getAppDirectory();
  478.  
  479. File file = createFile(fileName, inCache);
  480.  
  481. writeDataToFile(file, data);
  482. }
  483. }
  484.  
  485. /**
  486. * Write data in file of a parent directory
  487. *
  488. * @param parent
  489. * parent directory
  490. * @param fileName
  491. * desired filename
  492. * @param data
  493. * data
  494. *
  495. * @throws ExternalFileWriterException
  496. * if external storage is not available or free space is less
  497. * than size of the data
  498. */
  499. public void writeDataToFile(File parent, String fileName, String data)
  500. throws ExternalFileWriterException {
  501. if (isExternalStorageAvailable(true)) {
  502. getAppDirectory();
  503.  
  504. File file = createFile(fileName, parent);
  505.  
  506. writeDataToFile(file, data);
  507. }
  508. }
  509.  
  510. /**
  511. * Writes data to the file. The file will be created in the directory name
  512. * same as app.
  513. * <p>
  514. * Name of the file will be the timestamp.extension
  515. * </p>
  516. *
  517. * @param extension
  518. * extension of the file, pass null if you don't want to have
  519. * extension.
  520. * @param data
  521. * data to write
  522. * @param inCache
  523. * Pass true if you want to write data in External Cache. false
  524. * if you want to write data in external directory.
  525. *
  526. * @throws ExternalFileWriterException
  527. * if external storage is not available or free space is less
  528. * than size of the data
  529. */
  530. public void writeDataToTimeStampedFile(String extension, String data,
  531. boolean inCache) throws ExternalFileWriterException {
  532. if (isExternalStorageAvailable(true)) {
  533. getAppDirectory();
  534.  
  535. String fileExtension = (TextUtils.isEmpty(extension)) ? "" : "."
  536. + extension;
  537. String fileName = System.currentTimeMillis() + fileExtension;
  538.  
  539. File file = createFile(fileName, getAppDirectory(inCache));
  540.  
  541. writeDataToFile(file, data);
  542. }
  543. }
  544.  
  545. /**
  546. * Writes data to the file. The file will be created in the directory name
  547. * same as app.
  548. * <p>
  549. * Name of the file will be the timestamp.extension
  550. * </p>
  551. *
  552. * @param parent
  553. * parent directory path
  554. * @param extension
  555. * extension of the file, pass null if you don't want to have
  556. * extension.
  557. * @param data
  558. * data to write
  559. *
  560. * @throws ExternalFileWriterException
  561. * if external storage is not available or free space is less
  562. * than size of the data
  563. */
  564. public void writeDataToTimeStampedFile(File parent, String extension,
  565. String data) throws ExternalFileWriterException {
  566. if (isExternalStorageAvailable(true)) {
  567. getAppDirectory();
  568.  
  569. String fileExtension = (TextUtils.isEmpty(extension)) ? "" : "."
  570. + extension;
  571. String fileName = System.currentTimeMillis() + fileExtension;
  572.  
  573. File file = createFile(fileName, parent);
  574.  
  575. writeDataToFile(file, data);
  576. }
  577. }
  578.  
  579. /**
  580. * Writes data to the file. The file will be created in the directory name
  581. * same as app.
  582. * <p>
  583. * Name of the file will be the timestamp.extension
  584. * </p>
  585. *
  586. * @param extension
  587. * extension of the file, pass null if you don't want to have
  588. * extension.
  589. * @param data
  590. * data to write
  591. *
  592. * @throws ExternalFileWriterException
  593. * if external storage is not available or free space is less
  594. * than size of the data
  595. */
  596. public void writeDataToTimeStampedFile(String extension, byte[] data,
  597. boolean inCache) throws ExternalFileWriterException {
  598. if (isExternalStorageAvailable(true)) {
  599. getAppDirectory();
  600.  
  601. String fileExtension = (TextUtils.isEmpty(extension)) ? "" : "."
  602. + extension;
  603. String fileName = System.currentTimeMillis() + fileExtension;
  604.  
  605. File file = createFile(fileName, getAppDirectory(inCache));
  606.  
  607. writeDataToFile(file, data);
  608. }
  609. }
  610.  
  611. /**
  612. * Writes data to the file. The file will be created in the directory name
  613. * same as app.
  614. * <p>
  615. * Name of the file will be the timestamp.extension
  616. * </p>
  617. *
  618. * @param parent
  619. * parent directory path
  620. * @param extension
  621. * extension of the file, pass null if you don't want to have
  622. * extension.
  623. * @param data
  624. * data to write
  625. *
  626. * @throws ExternalFileWriterException
  627. * if external storage is not available or free space is less
  628. * than size of the data
  629. */
  630. public void writeDataToTimeStampedFile(File parent, String extension,
  631. byte[] data) throws ExternalFileWriterException {
  632. if (isExternalStorageAvailable(true)) {
  633. getAppDirectory();
  634.  
  635. String fileExtension = (TextUtils.isEmpty(extension)) ? "" : "."
  636. + extension;
  637. String fileName = System.currentTimeMillis() + fileExtension;
  638.  
  639. File file = createFile(fileName, parent);
  640.  
  641. writeDataToFile(file, data);
  642. }
  643. }
  644.  
  645. /**
  646. * Exception to report back developer about media state or storage state if
  647. * writing is not possible
  648. */
  649. public class ExternalFileWriterException extends Exception {
  650.  
  651. public ExternalFileWriterException(String messege) {
  652. super(messege);
  653. }
  654.  
  655. }
  656. }

在MainActivity.java中使用的方法如下:

  1. String test = "writer File class test";
  2. if (testFolder == null) {
  3. testFolder = writer.getExternalStorageDirectory();// 获取sd卡的根目录,testFolder和writer分别为File和AppExternalFileWriter(this)的实例
  4. }
  5. try {
  6. writer.writeDataToFile(testFolder, "fileName.txt",
  7. test.getBytes());// 注意对应的惨胡分别为存储目录,写入的文件名称,byte[]
  8. } catch (ExternalFileWriterException e) {
  9. // TODO Auto-generated catch block
  10. e.printStackTrace();
  11. }

注意添加写入的权限:

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

封装一个帮助类来写文件到android外置存储器上的更多相关文章

  1. 使用libzplay库封装一个音频类

    装载请说明原地址,谢谢~~      前两天我已经封装好一个duilib中使用的webkit内核的浏览器控件和一个基于vlc的用于播放视频的视频控件,这两个控件可以分别用在放酷狗播放器的乐库功能和MV ...

  2. 1.使用C++封装一个链表类LinkList

     使用C++封装一个链表类LinkList.写出相应一个测试用例 链表需要提供 添加 修改删除 除重 合并 排序创建 销毁等接口. 不能调用库函数或者使用STL等类库 题目延伸********** ...

  3. PHP封装一个通用好用的文件上传处理类

    封装一个文件上传类完成基本功能如下: 1.可上传多个或单个文件 2.上传成功返回一个或多个文件名 3.上传失败则返回每个失败文件的错误信息 上传类中的基本功能: 1.构造参数,用户可以自定义配置参数, ...

  4. 使用Java封装一个DBUtils类(反射)

    刚开始学JavaWeb时,我是调用N个setter方法将从数据库中查询出的数据封装成JavaBean的,极其繁琐. 后来了解SpringJDBC后,发现它提供的接口非常简单,然后就想自己封装一个简单的 ...

  5. Swift - 简单封装一个工具类模板

    创建模板类(封装一个类) 例1:新建一个名字叫做 Product 的类 Product.swift File 的内容 class Product { var name: String var desc ...

  6. 用C#写的一个OA类的APP, ios、Android都能跑,有源代码

    这是一个用C#写的OA类APP,功能包含请假.报销.部门管理.签到.IM.文件上传等功能 话不多说,先看视频 视频地址:http://v.youku.com/v_show/id_XMzUwMjQ1Mz ...

  7. 使用AutoFac实现依赖注入(封装一个注册类)

    public class AutoFacBootStrapper { public static void CoreAutoFacInit() { var builder = new Containe ...

  8. 封装一个 员工类 使用preparedStatement 查询数据 (2) 使用 arrayList 集合

    创建 员工=类生成 有参构造 get set 方法 toString 方法 package cn.hph; public class emp1 { //创建员工类的属性 private int id; ...

  9. 封装一个 员工类 使用preparedStatement 查询数据 (1)

    创建员工类  自动生成get set 方法 package cn.hph; public class emp { //定义表中的属性 private int id; private String en ...

随机推荐

  1. k8s 基础 k8s架构和组件

    k8s 的总架构图

  2. ORA-12504:tns:监听程序在 CONNECT_DATA中未获得SERVICE_NAME

    在VS2008中创建一个数据源时,提示以下错误 “ORA-12504:tns:监听程序在 CONNECT_DATA中未获得SERVICE_NAME” 本机安装ORACLE客户端,找出以下路径的文件D: ...

  3. service使用handler与Activity沟通的两种方法

    通过之前的学习,我们知道了在主线程中声明一个handler实例并实现了消息的处理方法之后,我可以在子线程中用此实例向主线程发消息,在处理方法中获取消息并更新UI. 那么,如果我们想用handler在s ...

  4. nodejs PK php全方位比较PHP的Node.js的优缺点

    全方位比较PHP的Node.js的优缺点 http://www.techug.com/php-vs-node-js

  5. R语言 arules包 apriori()函数中文帮助文档(中英文对照)

    apriori(arules) apriori()所属R语言包:arules                                         Mining Associations w ...

  6. 转:JMeter整合InfluxDB,Grafana让测试结果实时显示

    软件版本: apache-jmeter-2.13.tgz grafana-2.1.1-1.x86_64.rpm influxdb-0.8.8-1.x86_64.rpm 虽然官方不在支持influxdb ...

  7. 18. CTF综合靶机渗透(十一)

    靶机描述: SkyDog Con CTF 2016 - Catch Me If You Can 难度:初学者/中级 说明:CTF是虚拟机,在虚拟箱中工作效果最好.下载OVA文件打开虚拟框,然后选择文件 ...

  8. SNAT端口转发配置

    需求说明 在只有外网地址的机器上也能正常访问内网地址 配置过程 环境网络信息 网络名称 网络地址 外网 192.168.200.0/24 (网关:192.168.200.251) 内网 92.0.0. ...

  9. Java中的Junit单元测试

    测试方法必须使用@Test进行修饰 测试方法必须使用public void 进行修饰,不能带任何的参数 新建一个源代码目录来存放我们的测试代码 测试类的包名应该和被测试类的包名一致 测试单元中的每个方 ...

  10. window 环境下在虚拟机上安装php环境

    转发:https://www.cnblogs.com/orangegem/p/7191659.html 安装linux工具 :https://blog.csdn.net/z15732621582/ar ...