android怎么用流 读取云端图片

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)





);





检查一下代码,编译并运行该应用。在模拟器中尝试输入一些信息,保存一下,再试着读取它们。
参考技术A   直接用BitmapFactory.decodeFile(pathName);就可以读取。
  或者用你的方式,BitmapFactory.decodeStream(fosfrom);

  而且你这种读取方式也不对。你把一个图片分成多次读取,ByteArrayInputStream流里只保存了最后一份数据,怎么可能是个完整的图片。本回答被提问者和网友采纳
参考技术B 打开移动数据 从网页 登录云端 或者下载 对应 APP 登录

JAVA 图书管理系统,怎么用流读取TXT文档在控制台显示

写一个非常简单的图书管理系统,怎么实现读取图书的内容?用流怎么引入

参考技术A 像这种常用的IO流读取问题,一般都有人给你封装好了,你直接拿来用就行。 比如
apache的 common-io jar。使用举例:
File f = new File("d:\\data.txt");
System.out.println(FileUtils.readFileToString(f)); //读取成一个字符串
List<String> lines = FileUtils.readLines(f); //每行读取,把string封装到list列表里

怎么样很方便吧追问

我的意思是
怎么在另一个类里面读取流创建的TXT文档

追答

这不就是读取的代码么? 比如你创建的文档是 data.txt, 路径在d盘下,按照我上面的代码写不就能读取成字符串了? 你想要达到什么效果??

追问

你有QQ吗?方便我问吗?截图给你看,麻烦了

就是这个  有几个小说,我想实现就是点开小说的序列号 然后出现小说的介绍

追答

上班不方便QQ。你导入apache的common io jar,

在if(f2.exists)

    String str = FileUtils.readFileToString(f2);

    System.out.println(str);


-----------------不过话说你创建了一个文件,没往里面写任何数据啊,读出来为空~

追问

这个代码是放在那里的呢?不知道怎么放
文件我写了数据,还是在代码里面写数据,还是在TXT文档里面写?在代码里面怎么写?

追答

你要读取硬盘上某个txt文档,举例:
File f = new File("d:\\test");
String str = FileUtils.readFileToString(f); 就能读取字符串了

你要把字符串写入文件也很简单
FileUtils.writeStringToFile(f,"aaaa");
----------------读写的方法都已经告诉你了,你只要把我附件上贴的jar导入你的项目,就可以用了!至于具体在你的代码里哪里读、哪里写 那是你的事! 我已经说的够清楚了吧????

本回答被提问者和网友采纳
参考技术B

您好,提问者:
    下面是代码的套路。

import java.io.*;
public class FileDemo
    public static void main(String[] args)throws Exception
        File file = new File("D:\\\\xx.txt");
        if(!file.exists())
            throw new RuntimeException("文件不存在!");
        
        //使用缓冲,一行一行读取
        BufferedReader br = new BufferedReader(file);
        String line = "";
        while((line=br.readLine())!=null)
            System.out.println(line);//输出读取的行
        
    

追问

我知道怎么写流 我意思是怎么把流创建的TXT文档读取

以上是关于android怎么用流 读取云端图片的主要内容,如果未能解决你的问题,请参考以下文章

android 怎么在一个界面实现图片+文字+图片+文字

android怎么获取res——Drawable的图片数量

JAVA 图书管理系统,怎么用流读取TXT文档在控制台显示

android 存在数据库中的动态图片,如何读取出来,显示在ImageView中

Android自定义View-一张背景图片移动

Android记录一次安卓10的图片读取