2013-06-12 5 views
0

Мне нужно загрузить текстовый файл с сервера и просто сохранить его в памяти. Затем выполните строчку и прочитайте ее. Лучше не читайте строки за строкой прямо с сервера.Загрузите текстовый файл на Android

EDIT: «сохранить его в памяти» означает, не записывая его в файл.

Как вы это сделаете?

Спасибо!

+0

Это не дубликат! – Roman

+0

Это может помочь http://www.gadgetsaint.com/android/download-manager/ – ASP

ответ

6

Что так impossible об этом? Попробуйте этот код: Обратите внимание, что CONTEXT, создающий файл, может быть Activity/ApplicationContext/etc.

public boolean downloadFile(final String path) 
    { 
     try 
     { 
      URL url = new URL(path); 

      URLConnection ucon = url.openConnection(); 
      ucon.setReadTimeout(5000); 
      ucon.setConnectTimeout(10000); 

      InputStream is = ucon.getInputStream(); 
      BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5); 

      File file = new File(CONTEXT.getDir("filesdir", Context.MODE_PRIVATE) + "/yourfile.png"); 

      if (file.exists()) 
      { 
       file.delete(); 
      } 
      file.createNewFile(); 

      FileOutputStream outStream = new FileOutputStream(file); 
      byte[] buff = new byte[5 * 1024]; 

      int len; 
      while ((len = inStream.read(buff)) != -1) 
      { 
       outStream.write(buff, 0, len); 
      } 

      outStream.flush(); 
      outStream.close(); 
      inStream.close(); 

     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
      return false; 
     } 

     return true; 
    } 

Это простой файл R/W с использованием активности context.

EDIT: В соответствии с вашим недавно измененном вопрос, я отправляю это здесь:

Попробуйте этот кусок кода:

try { 
    // Create a URL for the desired page 
    URL url = new URL("ksite.com/thefile.txt"); 

    // Read all the text returned by the server 
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
    String str; 
    while ((str = in.readLine()) != null) { 
     // str is one line of text; readLine() strips the newline character(s) 
    } 
    in.close(); 
} catch (MalformedURLException e) { 
} catch (IOException e) { 
} 

Это должно работать

+0

Но вы пишете его в файл. Идея состоит в том, чтобы читать строки за строкой непосредственно с сервера – Roman

+0

Нет, вопрос, который вы изложили первоначально, говорит, что вам нужно прочитать его по очереди после его сохранения. Вот так. После того, как вы сохранили его, вы можете прочитать его по своему усмотрению, по очереди или иначе. То, что я разместил, - это просто способ чтения файла в Android. Как вы хотите, чтобы его читали, зависит от вас. –

+0

Извините, я, вероятно, не был достаточно ясен - я имел в виду без сохранения в SD-карте/локальной памяти. – Roman

0

Я сделал это. Просто откройте соединение с вашим сервером (если это FTP-сервер, просто сделайте это с FTPClient из общих ресурсов Apache). Установите это соединение в новый AsyncTask<...,...,...> и поместите свой код подключения в doInBackground(...). EDIT: Я сделал это так:

 FileOutputStream fos = activity.openFileOutput("temp.tmp", Context.MODE_PRIVATE); 
     System.out.println(activity.getFilesDir().getAbsolutePath()); 
     client.enterLocalPassiveMode(); 
     client.changeToParentDirectory(); 
     client.changeWorkingDirectory("/dsct2c/" + username); 
     client.retrieveFile(filename, fos); 
     fos.close(); 
     publishProgress(activity.getString(R.string.toast_file_saved) + " " + filename); 



     FileInputStream fis = activity.openFileInput("temp.tmp"); 
     InputStreamReader isr = new InputStreamReader(fis); 
     BufferedReader br = new BufferedReader(isr); 

     String line = br.readLine(); 
     while(line != null) 
     { 
     publishProgress(line); 
     System.out.println(line); 
     line = br.readLine(); 
     } 
1

Try:

 String line; 
     URL url = new URL("myserver.com/myfile.txt");  
     BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));  
     while ((line = in.readLine()) != null) { 
      // do something with line 
     } 
     in.close(); 
Смежные вопросы