gpt4 book ai didi

java - Android openFileInput 无法解析文件路径

转载 作者:太空狗 更新时间:2023-10-29 16:35:37 28 4
gpt4 key购买 nike

我添加了用于文件浏览的外部库。该库返回选定的文件路径键,但不返回值。

package com.example.dev.nordugrid;
import com.orleonsoft.android.simplefilechooser.ui.FileChooserActivity;

import android.content.Context;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.*;
import android.view.View;
import android.content.Intent;
import java.io.*;

public class jdlFailas extends ActionBarActivity {
final int FILE_CHOOSER = 1;
public String fileSelected;
public String myText;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jdl_failas);
}

public void openFILE(View view) {
Intent intent = new Intent(jdlFailas.this, FileChooserActivity.class);
startActivityForResult(intent, FILE_CHOOSER);

try {
FileInputStream fin = new FileInputStream ( fileSelected);
int c;
String temp="";
while( (c = fin.read()) != -1){
temp = temp + Character.toString((char)c);
}

fin.close();
myText = temp.toString();

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
}
}


public void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == FILE_CHOOSER) && (resultCode == RESULT_OK)) {
fileSelected = data.getStringExtra(com.orleonsoft.android.simplefilechooser.Constants.KEY_FILE_SELECTED);

TextView textView = (TextView) findViewById(R.id.editText2);

Toast.makeText(this, R.string.pasirinktasFailas + myText, Toast.LENGTH_SHORT).show();
textView.setText(myText);
}
}

public void jdlSave(View view) {
Intent intent = new Intent(jdlFailas.this, NaujaUzduotis.class);
startActivity(intent);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_jdl_failas, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

如果我输入正常的文件名,程序运行正常:

   FileInputStream fin = openFileInput("file.txt");

无论如何,我的主要问题是“如果我想使用路径而不是字符串,我该如何处理文件?”​​

.xml文件

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
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="com.example.dev.nordugrid.jdlFailas">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/pridekiteJDL"
android:id="@+id/textView6"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/prideti"
android:id="@+id/button12"
android:onClick="openFILE"
android:layout_below="@+id/textView6"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/rasytiRanka"
android:id="@+id/textView7"
android:layout_below="@+id/button12"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:ems="10"
android:id="@+id/editText2"
android:layout_below="@+id/textView7"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ikelti"
android:id="@+id/button13"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:onClick="jdlSave" />

pastebin 链接中有 LogCat 代码:http://pastebin.com/43kzEgRu

最佳答案

你的问题归根结底是因为忽略了两者之间的关键区别

FileInputStream fin = openFileInput("file.txt");

对比

FileInputStream fin = new FileInputStream("failas.txt")

第一个是可行的(在 Activity 或服务中),因为 openFileInput() 是 Android 特有的方法,它打开一个位于应用程序私有(private)目录中.

第二个在 Android 上不可行,因为 Java 的 FileInputStream(String path) 构造函数在仅给定文件名时将尝试打开工作目录中的文件,这在 Android 上是设备的根目录 - 您的应用不能存储任何数据的地方。

当您按照路径“/storage/sdcard/uzduotis.txt”指示处理外部存储时,您不能使用openFileInput(),但是与您的断言相反,您可以执行以下操作:

String path = "/storage/sdcard/uzduotis.txt";
FileInputStream fin = new FileInputStream(path);

或者甚至硬编码为

FileInputStream fin = new FileInputStream("/storage/sdcard/uzduotis.txt");

当然,与往常一样,总体成功取决于所有常见情况,例如拥有一个工作程序、拥有对外部存储的权限,以及之前在该名称和位置创建了一个文件。

关于java - Android openFileInput 无法解析文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29767912/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com