❶ 如果一個文件包含有圖片和文字的用什麼流來讀取
在word文件中的圖片中添加文字,可以通過文本框來實現,其具體的操作步驟:
1、單擊插入----圖片按鈕;
2、彈出插入圖片對話框,選擇所需要的圖片;
3、單擊插入----形狀----基本形狀----文本框工具;
4、在頁面上拖動滑鼠繪制一個文本框,輸入需要的文字;
5、選中文本框,單擊文本框工具格式----形狀填充----無填充;
6、選中文本框,單擊文本框工具格式----形狀輪廓----無輪廓;
7、用滑鼠拖動文本框,將其在相應的位置即可。
❷ android怎麼用流 讀取雲端圖片
在Java 直接用BitmapFactory.decodeFile(pathName);就可以讀取。
或者用你的方式,BitmapFactory.decodeStream(fosfrom);
SE的學習過程中,我們就接觸到了I/O流的概念,並且使用了一些文件輸入輸出流的API來將數據保存到文件或者是從文件中讀取數據。同樣,這個手段也適用於Android系統,我們可以在應用開發過程中使用文件相關的API方法。
何謂內部存儲呢?實際上就是指將程序的私有數據以文件的形式存儲在Android設備的內存中。同理,如果是存放在SD卡等地方,就稱之為外部存儲。
我們在,你需要建立文件的輸入輸出流,並在流中操作數據。
首先是寫文件。
為了使用內部存儲向文件中寫入一些數據,你可以調用openFileOutput()方法,需要的參數為文件名和寫入模式。寫入模式實際上就是該文件的許可權歸屬,可以是公有的,也可以是私有的。如何具體地創建一個文件輸出流呢,具體方式如下:
FileOutputStream fileOut =
openFileOutput("file_name",MODE_WORLD_READABLE);
//第一個參數即文件名,第二個參數表示文件存儲的模式
對於第二個參數,需要補充的是:文件存儲的模式公有四種:
MODE_PRIVATE:該模式是默認的,通過該模式創建的文件是私有的,即只能被應用本身訪問。注意:在該模式下寫入的內容會覆蓋原有的內容。
MODE_APPEND:與上個模式類似,但在寫入內容時會檢查待創建的文件是否存在。若文件已被創建,則往該文件中追加內容,而不是覆蓋原來的內容;若文件未被創建,則創建新的文件。
MODE_WORLD_READABLE:表示當前創建的這個文件允許被其他應用讀取。
MODE_WORLD_WRITEABLE:表示當前創建的這個文件允許被其他應用寫入。
默認情況下,不僅是應用創建的文件,包括Shared
Preferences和資料庫,都是私有的。那麼問題來了,如果希望其他應用既能讀又能寫,應該怎麼辦呢?參考下面這種用法:
FileOutputStream fileOut = openFileOutput("file_name",MODE_WORLD_READABLE +
MODE_WORLD_WRITEABLE);
而對於openFileOutput()方法,它返回的是一個FileOutputStream實例。換言之,你通過文件輸出流對象中得到了這個實例,隨後你便可以調用寫相關的方法來向文件寫入數據。具體的用法如下:
String str = "shiyanlou";
//待寫入的數據
fOut.write(str.getBytes());
//實際上寫入文件的是一個位元組數組,我們用gettBytes()方法將其轉換成目標格式
fOut.close();
//記得寫入完畢後要用close()結束
接下來是讀文件。
怎樣讀取我們剛剛創建的這個文件呢?你應該猜到了,是使用openFileInput()方法。該方法需要填入待讀取文件的文件名,同樣,它返回的是一個FileInputStream的實例。具體用法如下:
FileInputStream fileIn = openFileInput(file);
在打開輸入流後,你可以調用read()方法每次從文件中讀出一個字元出來,然後裝入一個字元串變數中。具體做法如下:
int ch;
String temp="";
while( (ch = fin.read()) != -1){
temp = temp + Character.toString((char)ch);
//不斷地追加讀取的內容
}
//通過一個for循環,你最後得到的temp字元串包含了文件中的所有數據
fileIn.close();
//記得要關閉輸入流
除了上面我們用到的這些方法(比如write()、read()和close()),FileOutputStream和FileInputStream類中還有很多常用的方法,我們在下面作一簡要介紹。
FileOutputStream類中的其它常用方法:
write(byte[] b, int off, int len):該方法從指定的位元組數組開始到該文件輸出流關閉寫入len位元組。
getChannel():該方法返回一個只讀的、與文件輸出流關聯的文件通道對象(FileChannel)
getFD():該方法返回與此流有關的文件描述符對象(FileDescriptor)
FileInputStream類中的其它常用方法:
read(byte[] b, int off, int len):該方法從輸入流中數據讀取最多len個位元組到位元組數組
getChannel():該方法返回一個只讀的、與文件輸出流關聯的文件通道對象(FileChannel)
getFD():該方法返回與此流有關的文件描述符對象(FileDescriptor)
available():該方法可通過一個方法的調用者從輸入流中阻止這個輸入流返回可以讀取(或跳過)的位元組數的估計值。
四、在Android上實現文件讀寫
下面我們通過一個實例來學習如何將Java中常用的文件讀寫沿用到Android中去。
實驗步驟主要有:
(若你已在第二小節完成,請跳至下一步)使用Android
Studio創建應用項目FileIOPractice,包名為com.shiyanlou.android.fileiopractice,基於Android
5.1製作。同時添加MainActivity及其布局資源文件。
創建並打開AVD模擬器(鏡像選擇API22:Android 5.1.1)。
在res/layout/activity_main.xml資源文件放入一些文本框和按鈕。
在MainActivity.java中,初始化要用到的控制項,添加文件讀寫相關的代碼。
編譯並運行這個應用,等待應用安裝至模擬器,在模擬器中使用該應用。
現在你可以按照上述步驟自己完成該實驗。下面也給出了本實驗涉及到的源代碼和資源文件詳情,在必要時你可以使用它們。在注釋中我們也對一些模塊進行了詳細的講解。
以下是MainActivity的布局文件res/layout/activity_main.xml:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textview_domain"
android:text="Shiyanlou.com"
android:textSize="40dp"
android:textColor="#11AA8C"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView_appName"
android:text="File I/O Practice"
android:layout_below="@+id/textview_domain"
android:layout_centerHorizontal="true"
android:textColor="#000000"
android:textSize="40dp" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:hint="Input some text here."
android:focusable="true"
android:layout_marginTop="20dp"
android:layout_below="@+id/textView_appName"
android:layout_alignEnd="@+id/textView_appName"
android:layout_alignLeft="@+id/textView_appName"
android:layout_alignStart="@+id/textView_appName"
android:layout_alignRight="@+id/textView_appName"
android:inputType="textMultiLine"
android:minLines="5"
android:background="#DDDDDD" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView_data"
android:text="Text would be shown here."
android:layout_below="@+id/button_save"
android:layout_marginTop="10dp"
android:layout_centerHorizontal="true" />
android:layout_width="120dp"
android:layout_height="wrap_content"
android:id="@+id/button_save"
android:text="Save File"
android:textColor="#FFFFFF"
android:background="#11AA8C"
android:layout_alignLeft="@+id/textView_appName"
android:layout_alignStart="@+id/textView_appName"
android:layout_below="@+id/editText"
android:layout_marginTop="20dp"/>
android:layout_width="120dp"
android:layout_height="wrap_content"
android:id="@+id/button_load"
android:text="Load File"
android:textColor="#FFFFFF"
android:background="#11AA8C"
android:layout_alignTop="@+id/button_save"
android:layout_alignRight="@+id/editText"
android:layout_alignEnd="@+id/editText" />
以下是src/MainActivity.java中的源代碼:
package com.shiyanlou.android.fileiopractice;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class MainActivity extends Activity {
private Button button_save;
private Button button_load;
private TextView textView_status;
private EditText editText;
//聲明各個控制項
private String data;
private String file = "shiyanlou_file";
//聲明用於存放數據的變數data和文件名常量file
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_save =(Button)findViewById(R.id.button_save);
button_load =(Button)findViewById(R.id.button_load);
editText =(EditText)findViewById(R.id.editText);
textView_status =(TextView)findViewById(R.id.textView_data);
//實例化各個控制項
//為按鈕設置點擊事件監聽器
//首先是保存按鈕(寫操作)
button_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
data = editText.getText().toString();
//調用getText()方法從文本框中讀取內容,使用toString()方法將其轉化為String類型數據,並存放到data變數中
try {
//對於文件讀寫操作應使用異常處理流程
FileOutputStream fileOut = openFileOutput(file, MODE_APPEND);
// 此處用到了MODE_PRIVATE,在新版本的Android系統中,不推薦使用MODE_WORLD_READABLE等模式
// 這是因為Android中為應用間的數據交互提供了更好的支持,如Content Privoder等,你可一進步了解
fileOut.write(data.getBytes());
//用write()方法保存數據
fileOut.close();
//關閉輸出流
Toast.makeText(getBaseContext(), "File saving completed.",
Toast.LENGTH_SHORT).show();
//用一個Toast來告訴用戶已經寫入完畢了
} catch (Exception e) {
e.printStackTrace();
}
}
});
//其次是讀取按鈕(讀操作)
button_load.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
//同理,建立文件輸入流
FileInputStream fileIn = openFileInput(file);
int ch;
//聲明一個整型變數ch用於接收數據
String tempText = "";
//這里的tempText用於臨時存放讀取的數據(字元串)
while ((ch = fileIn.read()) != -1) {
//這里的-1是特定的狀態碼,表示文件讀取結束
//在while循環中逐個讀取數據,並追加到tempText中
tempText = tempText + Character.toString((char) ch);
//將ch轉化為字元
}
textView_status.setText(tempText);
//讀取完畢後將文字顯示出來
Toast.makeText(getBaseContext(), "File reading completed.",
Toast.LENGTH_SHORT).show();
//同樣用一個Toast告知用戶已經讀取完成
} catch (Exception e) {
}
}
});
}
}
檢查一下代碼,編譯並運行該應用。在模擬器中嘗試輸入一些信息,保存一下,再試著讀取它們。