Как мне использовать этот код - PullRequest
0 голосов
/ 27 апреля 2011

Я нашел этот код, который, как мне кажется, нужен для того, чтобы он копировал байтовый файл на 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());
        }
    }

Ответы [ 4 ]

0 голосов
/ 30 апреля 2011

Я нашел способ скопировать файлы на SD-карту, но спасибо всем за ваши ответы. Я очень ценю, что вы нашли время для этого!

Мое решение подробно описано здесь.

Мне нужно иметь возможность хранить звуковые файлы для моего приложения на SDCard

0 голосов
/ 27 апреля 2011

Вы можете добавить его в качестве другого метода своей собственной Деятельности, если ваш код невелик, или вы можете создать служебный класс, предположим,

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 и изменил механизм исключения, чтобы лучше соответствовать потребностям Android.

0 голосов
/ 27 апреля 2011

Что ж, на первый взгляд это кажется надежным методом, за исключением того, что вы хотите заменить операторы печати System.out методом журнала Android ... но кроме этого вы можете скопировать / вставить это и включить это метод в классе.

Чтобы использовать его, однако ... вы должны взглянуть на документацию по внешнему хранилищу. http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

Вам понадобится использовать методы Android, чтобы получить правильные каталоги SDCard и т. Д. *

0 голосов
/ 27 апреля 2011

Я бы сделал класс 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, но вы тоже не хотите этого делать.В зависимости от вашего приложения вы можете добавить всплывающее уведомление о сбое при копировании.Вы, по крайней мере, хотите зарегистрировать это.

В зависимости от размера копируемых файлов, вы можете сделать это в фоновом потоке, чтобы не засорить ваш пользовательский интерфейс.

...