2013-03-30 4 views
1

Я пишу криптографическое приложение, которое будет генерировать пару открытых частных ключей для RSA. Частный ключ необходимо сохранить на устройстве. При тестировании с обычным приложением Java, ключи были сгенерированы и затем сохранены в файл со следующим:Как я могу написать файл с Android-приложением?

public static void saveToFile(String fileName,BigInteger mod, BigInteger exp) throws IOException 
    { 
    ObjectOutputStream oout = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(fileName))); 
     try 
     { 
       oout.writeObject(mod); 
       oout.writeObject(exp); 
     } 

     catch (Exception e) 
     { 
       throw new IOException("Unexpected error", e); 
     } 

     finally 
     { 
       oout.close(); 
     } 
} 

Ключевой файл появится в каталоге проекта. Однако с Android-приложением этого не происходит. Как я могу написать файл с Android-приложением?

Спасибо!

+0

http://stackoverflow.com/questions/1239026/how-to-create -a-file-in-android – iTurki

ответ

2

Ключевой файл будет отображаться в каталоге проекта. Однако с Android-приложением этого не происходит. Как я могу написать файл с Android-приложением?

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

//Internal storage location using your filename parameter 
File file = new File(context.getFilesDir(), filename); 

//External storage location using your filename parameter 
File file = new File(Environment.getExternalStorage(), filename); 

Разница, являющаяся внутренним хранилищем, доступна только вашему приложению; внешнее хранилище может быть прочитано/записано в любом месте, включая ваш компьютер, если вы подключаете и монтируете хранилище через USB.

Затем вы можете обернуть соответствующий файл в FileOutputStream вашего существующего кода.

+0

Спасибо за помощь. Возможно, я вообще что-то пропустил, но где вы получаете «контекст»? Как бы то ни было, netbeans говорит мне, что «не может найти символ: переменный контекст». Извините, если это глупый вопрос. Это первое приложение, которое я когда-либо пробовал. – user1623503

+0

Это было просто для того, чтобы показать, что 'getFilesDir()' - это метод в 'Context', поэтому вы можете называть его любым объектом Context. Системные компоненты, такие как 'Activity' и' Service', все наследуются от 'Context'. – Devunwired

+0

Думаю, я до сих пор не понимаю. У меня нет объектов Контекста. Фактически, это абстрактный класс и не может быть создан. – user1623503

0

Первый проход главный класс от вас называют как метод:

Boolean writfile; 
writfile =savTextFileInternal(this.getApplicationContext(),"Maa","Ambika"); 
Toast.makeText(this, "File write:"+writfile, Toast.LENGTH_LONG).show(); 

Создать метод, как это:

public boolean savTextFileInternal(Context context,String sFileName, String sBody) 
{ 
    try 
    { 
     File root = new File(context.getFilesDir(),"myfolder"); 

     if (!root.exists()) { 
      root.mkdirs(); 
     } 

     File gpxfile = new File(root, sFileName); 
     FileWriter writer = new FileWriter(gpxfile); 
     writer.append(sBody); 
     writer.flush(); 
     writer.close(); 
     return true; 
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
     return false; 
    } 
} 
Смежные вопросы