Skip to main content

Featured

Build docker image from multiple build contexts

Build docker image from multiple build contexts Building a docker image requires specifying a source of truth to include in the image from a local directory or a remote git repository. In the previous version, the docker BuildKit allows users to specify the build context from a single source of truth only. However, the engineers may need to have the context from different locations based on the type of files. For instance, icons, images or other resources that are not included in the same package, including the resource from other docker images. Fortunately, the Docker Buildx toolkit supports multiple build context flag for Docker 1.4. Let's learn how to use this new feature. The following list is a shortcut for jumping into a specific topic handy. What version of Docker is this tutorial targeting? How to specify the version of Dockerfile frontend? Ho

[Android]存取External Storage

在權限的部分,需在Manifest檔內加入:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
前者為設定可讀寫的權限。是必備的。
後者是設定可掛載或是卸載可移除式儲存裝置。(如沒有加入這個權限,則在進行檔案操作時,會出現"Permission Denied"的錯誤訊息)。

A.之後在進行檔案寫入的動作時
    1.如果是要寫入二進位的資料,可用FileOutputStream.write()直接寫出檔案。
private void WriteData(String Data)  
{
//Check the state of storage
    if( !Environment.MEDIA_MOUNTED.equals((Environment.getExternalStorageState())) ) {  
        Log.d("WriteData", "--SDCard has been removed.--");  
        return;  
    }  

    try  
    {  
    //Get the path of root folder  
        File rootDir = Environment.getExternalStorageDirectory();  

    //Create a output stream object  
        FileOutputStream outStream = new FileOutputStream(new File(rootDir.getPath(), "IOTestFile.dat"));  

    //Write Data  
        byte[] buffer = new byte[BUFFER_SIZE];  
        buffer[0] = 0x30;  
        buffer[1] = 0x31;  
        buffer[2] = 0x32;  
        buffer[3] = 0x33;  
        buffer[4] = 0x34;  
        outStream.write(buffer, 0, 5);  

    //Flush it  
        outStream.flush();  

    //Close self  
        outStream.close();  

    }catch(Exception e){  
        Log.d("--WriteData--", e.getMessage());  
    }          
}  
要注意的是,使用FileOutputStream時,要把FileOutputStream放到try...catch()內。 Environment.getExternalStorageDirectory()可以取得到目前External storage所在的路徑。
    2.如果是要寫入純文字檔,可用FileOutputStream與OutputStreamWriter.append()來將資料寫入檔案內。
private void WriteDataWithOutputStreamWriter()  
{  
    try  
    {  
        String FuncName = "WriteDataWithOutputStreamWriter";  

    //Check the SDCard state  
        if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))  
        {  
            Log.d("WriteDataWithOutputStreamWriter", "======== External SD Card not mounted ===========");  
            return;  
        }  

    //Get the path of the root folder  
        File rootDir = Environment.getExternalStorageDirectory();  

    //Create file object  
        File FileContent = new File(String.format("%s/%s/IOTestFile.dat", rootDir.getParent(), rootDir.getName()));  

        if(!FileContent.createNewFile())  
        {  
            Log.d(FuncName, "Cannot create file");  
        }  
        Log.d("WriteDataWithOutputStreamWriter", String.format("======= Target Path = %s ============", FileContent.getPath()));  

    //Create a output stream object  
        FileOutputStream outStream = new FileOutputStream(FileContent);  

    //Create a output stream writer  
        OutputStreamWriter streamWriter = new OutputStreamWriter(outStream);  

    //write data  
        streamWriter.append("lalalala");  

    //close writer  
        streamWriter.close();  

    //close output stream object  
        outStream.close();  
    }catch(Exception e){  
        Log.d("--WriteDataByOutputStreamWriter--", e.getMessage());  
    }
}  
B.如果是要讀取檔案,則可以用:
    1.讀取二進位檔的內容,則可用FileInputStream來取得資料即可。
private String ReadData()  
{  
    try  
    {  
    //Get the path of root folder  
        File rootDir = Environment.getExternalStorageDirectory();  

    //Create a input Stream Object  
        FileInputStream inStream = new FileInputStream(new File(rootDir.getPath(), "IOTestFile.dat"));  

    //Load the data from target  
        byte[] buffer = new byte[BUFFER_SIZE];  
        int DataLen = inStream.read(buffer);  
        if(DataLen == -1)  
        {  
            Log.d("ReadData", "========= Reading Data has problem. ==================");  
            throw new IOException("Reading Data has problem.");  
        }  

        inStream.close();  

    //Show data  
        TextView text = (TextView)findViewById(R.id.editText1);  
        String OutText = "";  
        for(int i = 0 ; i < 5 ; i++)  
        {  
            Log.d("ReadData", String.format("--------- Data(%x) has been loaded from %s -------------", buffer[i], rootDir.getPath()));  
            OutText += String.format("%x", buffer[i]);  
        }  

        text.setText((CharSequence)OutText);
    }catch(Exception e){  
        Log.d("--ReadData--", e.getMessage());  
    }  
    return "";  
}  

Comments

Popular Posts