2011-04-27 101 views
0

我发现此代码似乎是我需要的,因为它会将字节文件复制到SDCard。如何使用此复制代码

但是,如何使用它?说我有一个名为mytext.txt的文本文件,我把它放在我的应用程序中?我将如何参考它?我正在使用Eclipse

public static final void copyfile(String srFile, String dtFile){ 
     try{ 
      File f1 = new File(srFile); 
      File f2 = new File(dtFile); 
      InputStream in = new FileInputStream(f1); 
      OutputStream out = new FileOutputStream(f2); 
      byte[] buf = new byte[1024]; 
      int len; 
      while ((len = in.read(buf)) > 0){ 
       out.write(buf, 0, len); 
      } 
      in.close(); 
      out.close(); 
      System.out.println("File copied to " + f2.getAbsolutePath()); 
     } catch(FileNotFoundException ex){ 
      System.out.println(ex.getMessage() + " in the specified directory."); 
      System.exit(0); 
     } catch(IOException e){ 
      System.out.println(e.getMessage()); 
     } 
    } 

回答

0

我会制作一个FileUtilities类或其他类。你看过这里的例子吗?

http://download.oracle.com/javase/tutorial/essential/io/copy.html

http://www.java2s.com/Code/Java/File-Input-Output/FileCopyinJava.htm

你不想盲目地执行该代码。它看起来像是用于Java控制台应用程序。系统Printlines不会去用户在Android应用程序中看到的任何地方。我不知道System.exit()在Android应用程序中做了什么,但是你也不想这样做。根据您的应用程序,您可能希望添加一个副本失败的Toast通知。你至少要记录这一点。

根据您要复制的文件大小,您可能希望在后台线程中执行此操作,以免堵塞您的用户界面。

0

您可以将其添加为自己的活动的另一种方法,如果你的代码是小,或者您可以创建一个实用工具类,让我们假设

class MyUtilities { 
    public static final void copyfile(String srFile, String dtFile) throws IOException, FileNotFoundException{ 
     File f1 = new File(srFile); 
     File f2 = new File(dtFile); 
     InputStream in = new FileInputStream(f1); 
     OutputStream out = new FileOutputStream(f2); 
     byte[] buf = new byte[1024]; 
     int len; 
     while ((len = in.read(buf)) > 0){ 
      out.write(buf, 0, len); 
     } 
     in.close(); 
     out.close(); 
     Log.d("MyUtilities", "File copied to " + f2.getAbsolutePath()); 
    } 
} 

,你会用它作为:

TextEdit text1 = findViewById(R.id.text1); 
TextEdit text2 = findViewById(R.id.text2); 

String file1 = text1.getText(); 
String file2 = text2.getText(); 

if (text1 != null and text2 != null) { 
    try{ 
    MyUtilities.copyfile (file1, file2); 
    } catch(FileNotFoundException ex){ 
     Log.e("MyUtilities", ex.getMessage() + " in the specified directory."); 
    } catch(IOException e){ 
     Log.e("MyUtilities", e.getMessage()); 
    } 
} 

我添加了日志而不是System.out,并更改了Exception机制以更好地匹配Android需求。

+0

谢谢你的帮助,如果你不介意的话,我可能需要一点点的手拿着... 我添加了一个类MyUtilities在哪个是你的顶级一套代码和底部的集我把这些代码放到了我的活动中,它似乎并不知道什么是textedit,什么时候引用r.id.text1和text 2 - 它们是什么? 我在哪里可以放上mytext.txt,如何让应用程序知道这是我想复制的文件 - 对不起,我是一个小菜鸟 – MrCloister 2011-04-28 09:10:19

+0

@MrCloister text1和tex2是在XML中定义的“TextEdit”小部件的示例名称文件。我建议你阅读Android开发指南,特别是UI部分:http://developer.android.com/guide/topics/ui/index.html和资源:http://developer.android。com/guide/topics/resources/index.html – Aleadam 2011-04-28 13:02:36

+0

对不起,我正在密集 - 你已经把它们放在那里,所以用户可以指定一个源和目标路径。我将自动复制大量文件,我会看看我是如何与此相关的,并让我们知道我是否取得了成功。 谢谢 – MrCloister 2011-04-28 14:13:21

0

那么,乍一看,这似乎是一个很好的方法,除了你想用Android Log方法替换System.out打印语句......但除此之外,你可以复制/粘贴,并包括该方法在一个类中。

要使用它,但是......您应该查看外部存储文档。 http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

你会需要使用Android方法来得到正确的SD卡目录,等等...