Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass a file path which is in assets folder to File(String path)? [duplicate]

Possible Duplicate:
Android - How to determine the Absolute path for specific file from Assets?

I am trying to pass a file to File(String path) class. Is there a way to find absolute path of the file in assets folder and pass it to File(). I tried file:///android_asset/myfoldername/myfilename as path string but it didnt work. Any idea?

like image 609
akd Avatar asked Aug 05 '12 21:08

akd


People also ask

How do you give a file path?

Click the Start button and then click Computer, click to open the location of the desired file, hold down the Shift key and right-click the file. Copy As Path: Click this option to paste the full file path into a document. Properties: Click this option to immediately view the full file path (location).

How it is possible to get path and filename of the given file?

A path may contain the drive name, directory name(s) and the filename. To extract filename from the file, we use “GetFileName()” method of “Path” class. This method is used to get the file name and extension of the specified path string. The returned value is null if the file path is null.


2 Answers

AFAIK, you can't create a File from an assets file because these are stored in the apk, that means there is no path to an assets folder.

But, you can try to create that File using a buffer and the AssetManager (it provides access to an application's raw asset files).

Try to do something like:

AssetManager am = getAssets(); InputStream inputStream = am.open("myfoldername/myfilename"); File file = createFileFromInputStream(inputStream);  private File createFileFromInputStream(InputStream inputStream) {     try{       File f = new File(my_file_name);       OutputStream outputStream = new FileOutputStream(f);       byte buffer[] = new byte[1024];       int length = 0;        while((length=inputStream.read(buffer)) > 0) {         outputStream.write(buffer,0,length);       }        outputStream.close();       inputStream.close();        return f;    }catch (IOException e) {          //Logging exception    }     return null; } 

Let me know about your progress.

like image 73
yugidroid Avatar answered Sep 19 '22 12:09

yugidroid


Unless you unpack them, assets remain inside the apk. Accordingly, there isn't a path you can feed into a File. The path you've given in your question will work with/in a WebView, but I think that's a special case for WebView.

You'll need to unpack the file or use it directly.

If you have a Context, you can use context.getAssets().open("myfoldername/myfilename"); to open an InputStream on the file. With the InputStream you can use it directly, or write it out somewhere (after which you can use it with File).

like image 37
nEx.Software Avatar answered Sep 16 '22 12:09

nEx.Software