Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Studio访问文件_Java_Android_Android Studio - Fatal编程技术网

Java Android Studio访问文件

Java Android Studio访问文件,java,android,android-studio,Java,Android,Android Studio,希望在android应用程序中以文本形式打开文本文档。我在使用Java的Android Studio中工作。我的权限设置为允许我请求用户权限,我做了很多研究,没有找到比我拥有的更多的东西。出现一个错误,未授予权限。我使用的是安卓7或更高版本。请帮忙 我在MainActivity中的代码是: public class MainActivity extends AppCompatActivity { static ArrayList<String> notes = new Ar

希望在android应用程序中以文本形式打开文本文档。我在使用Java的Android Studio中工作。我的权限设置为允许我请求用户权限,我做了很多研究,没有找到比我拥有的更多的东西。出现一个错误,未授予权限。我使用的是安卓7或更高版本。请帮忙

我在MainActivity中的代码是:

public class MainActivity extends AppCompatActivity {

    static ArrayList<String> notes = new ArrayList<>();
    static ArrayAdapter arrayAdapter;
    //for asking permission
    private final static int REQUEST_CODE_ASK_PERMISSIONS = 1;
    private static final String[] REQUIRED_SDK_PERMISSIONS = new String[] {
            Manifest.permission.WRITE_EXTERNAL_STORAGE};

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.add_note_menu, menu);
        return super.onCreateOptionsMenu (menu);
    }
    // Storage Permissions
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };

   public static void verifyStoragePermissions(Activity activity) {
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        if (permission != PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(
                    activity,
                    PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE
            );
        }
    }
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        super.onOptionsItemSelected(item);
        if (item.getItemId() == R.id.open_note){
            //get txt from file and send as text to textEditor action

            //pick the file
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                //intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("*/*");
                startActivityForResult(
                    Intent.createChooser(intent, "Choose a file"),
                    8778
            );

        }

        if (item.getItemId() == R.id.new_note){
        //New Note

            Intent intent = new Intent (getApplicationContext(), NoteEditorActivity.class);     
            startActivity(intent);
            return true;
        }
        return false;
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    //get the file path as string
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 8778 && resultCode == Activity.RESULT_OK){
            checkPermissions();
            if (ContextCompat.checkSelfPermission(
                    MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) ==
                    PackageManager.PERMISSION_GRANTED) {

                //build the uri
                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
                verifyStoragePermissions(MainActivity.this);
                String baseDir = Environment.getExternalStoragePublicDirectory(
                        Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
              
                StringBuilder text = new StringBuilder();

                //request permission
                final int REQUEST_CODE_ASK_PERMISSIONS = 1;
                final String[] REQUIRED_SDK_PERMISSIONS = new String[] {
                        Manifest.permission.WRITE_EXTERNAL_STORAGE};

                try {

                    BufferedReader br = new BufferedReader(new 
    FileReader(("/storage/emulated/0/download/paperclip.txt")));
                    new AlertDialog.Builder(MainActivity.this)
                            .setIcon(android.R.drawable.ic_dialog_alert).setTitle("File 
    Name").setMessage("YAY").show();
                    String line=br.readLine();

                    while (!((line).equals(null))) {
                        text.append(line);
                        text.append('\n');
                        new AlertDialog.Builder(MainActivity.this)
                                .setIcon(android.R.drawable.ic_dialog_alert).setTitle("File 
   Name").setMessage(line + "great").show();
                    }
                    br.close();
                } catch (IOException e) {
                    new AlertDialog.Builder(MainActivity.this)
                            .setIcon(android.R.drawable.ic_dialog_alert).setTitle("File 
    Name").setMessage("In the catch!" + e).show();
                }
                String result = text.toString();
                new AlertDialog.Builder(MainActivity.this)
                        .setIcon(android.R.drawable.ic_dialog_alert)
                        .setTitle("File Info")
                        .setMessage(result + "result")
                        .show();
                // You can use the API that requires the permission.
                new AlertDialog.Builder(MainActivity.this)
                        .setIcon(android.R.drawable.ic_dialog_alert) .setTitle("File 
Name").setMessage("GRANTED").show();
                //performAction(...);
            }

        }
    }

    protected void checkPermissions() {
        new AlertDialog.Builder(MainActivity.this)
                .setIcon(android.R.drawable.ic_dialog_alert) .setTitle("File Name").setMessage("In 
 Check Permissions").show();
        final List<String> missingPermissions = new ArrayList<String>();
        // check all required dynamic permissions
        for (final String permission : REQUIRED_SDK_PERMISSIONS) {
            final int result = ContextCompat.checkSelfPermission(this, permission);
            if (result != PackageManager.PERMISSION_GRANTED) {
                missingPermissions.add(permission);
            }
        }
        if (!missingPermissions.isEmpty()) {
            // request all missing permissions

            final String[] permissions = missingPermissions
                    .toArray(new String[missingPermissions.size()]);
            ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE_ASK_PERMISSIONS);
        } else {
            final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
            Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
            onRequestPermissionsResult(REQUEST_CODE_ASK_PERMISSIONS, REQUIRED_SDK_PERMISSIONS,
                    grantResults);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
                                           @NonNull int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CODE_ASK_PERMISSIONS:
                for (int index = permissions.length - 1; index >= 0; --index) {
                    if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
                        // exit the app if one permission is not granted
                        Toast.makeText(this, "Required permission '" + permissions[index]
                                + "' not granted, exiting", Toast.LENGTH_LONG).show();
                        finish();
                        return;
                    }

                }
                // all permissions were granted
        }
    }
    @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = (ListView) findViewById(R.id.listVeiw);

        SharedPreferences sharedPreferences = 
getApplicationContext().getSharedPreferences("com.example.notepadr", Context.MODE_PRIVATE);

        //Dealing with saving and stuff!!!!!
        HashSet<String> set = (HashSet<String>) sharedPreferences.getStringSet("notes", null);

        if (set==null){

            notes.add("Example note");

        }else{
            notes = new ArrayList(set);
        }
        arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, notes);

        listView.setAdapter(arrayAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
                Intent intent = new Intent(getApplicationContext(), NoteEditorActivity.class);
                intent.putExtra("noteId", i);
                startActivity(intent);
            }
        });
public类MainActivity扩展了AppCompatActivity{
静态ArrayList notes=新建ArrayList();
静态阵列适配器阵列适配器;
//请求许可
私有最终静态int请求\代码\请求\权限=1;
私有静态最终字符串[]必需的\u SDK\u权限=新字符串[]{
Manifest.permission.WRITE\u EXTERNAL\u STORAGE};
@凌驾
公共布尔onCreateOptions菜单(菜单)
{
MenuInflater MenuInflater=getMenuInflater();
菜单充气(右菜单添加注释菜单,菜单);
返回super.onCreateOptions菜单(菜单);
}
//存储权限
专用静态最终整数请求\外部\存储=1;
私有静态字符串[]权限\存储={
Manifest.permission.READ_外部存储,
Manifest.permission.WRITE\u外部存储
};
公共静态无效verifyStoragePermissions(活动){
//检查我们是否有写权限
int permission=ActivityCompat.checkSelfPermission(activity,Manifest.permission.WRITE\u外部存储);
if(权限!=PackageManager.permission\u已授予){
//我们没有权限,因此请提示用户
ActivityCompat.requestPermissions(
活动,
存储许可,
请求外部存储
);
}
}
@凌驾
公共布尔值OnOptionItemSelected(@NonNull MenuItem item){
super.onOptionsItemSelected(项目);
if(item.getItemId()==R.id.open\u注释){
//从文件中获取txt并作为文本发送到textEditor操作
//选择文件
意向意向=新意向(意向.行动\u获取\u内容);
//intent.addCategory(intent.CATEGORY\u可打开);
intent.setType(“*/*”);
startActivityForResult(
Intent.createChooser(Intent,“选择文件”),
8778
);
}
if(item.getItemId()==R.id.new\u注释){
//新注释
Intent Intent=新的Intent(getApplicationContext(),NoteEditorActivity.class);
星触觉(意向);
返回true;
}
返回false;
}
@RequiresApi(api=Build.VERSION\u CODES.O)
@凌驾
//以字符串形式获取文件路径
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==8778&&resultCode==Activity.RESULT\u确定){
检查权限();
if(ContextCompat.checkSelfPermission(
MainActivity.this、Manifest.permission.READ\u外部存储)==
PackageManager.权限(已授予){
//构建uri
getExternalStoragePublicDirectory(Environment.DIRECTORY\u下载);
验证StoragePermissions(MainActivity.this);
String baseDir=Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
StringBuilder text=新的StringBuilder();
//请求许可
最终整数请求\代码\请求\权限=1;
最终字符串[]所需的\u SDK\u权限=新字符串[]{
Manifest.permission.WRITE\u EXTERNAL\u STORAGE};
试一试{
BufferedReader br=新的BufferedReader(新的
FileReader((“/storage/simulated/0/download/paperclip.txt”);
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报).setTitle(“文件
Name”).setMessage(“YAY”).show();
String line=br.readLine();
而(!((line).equals(null))){
text.append(行);
text.append('\n');
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报).setTitle(“文件
Name“).setMessage(行+“great”).show();
}
br.close();
}捕获(IOE异常){
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报).setTitle(“文件
Name“).setMessage(“在catch中!”+e).show();
}
字符串结果=text.toString();
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报)
.setTitle(“文件信息”)
.setMessage(结果+“结果”)
.show();
//您可以使用需要该权限的API。
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报).setTitle(“文件
名称“).setMessage(“已授予”).show();
//绩效(…);
}
}
}
受保护的无效检查权限(){
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报).setTitle(“文件名”).setMessage(“在
检查权限“).show();
final List missingPermissions=new ArrayList();
//检查所有必需的动态权限
for(最终字符串权限:必需的\u SDK\u权限){
最终int结果=ContextCompat.checkSelfPermission
  <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:layout_editor_absoluteX="-16dp"
        tools:layout_editor_absoluteY="-69dp">

        <Button
            android:id="@+id/storage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Storage"
            android:layout_marginTop="16dp"
            android:padding="8dp"
            android:layout_centerHorizontal="true"/>

        <ListView
            android:id="@+id/listVeiw"
            android:layout_width="400dp"
            android:layout_height="732dp"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentBottom="false"
            android:layout_marginTop="3dp"
            android:layout_marginEnd="7dp"
            android:layout_marginBottom="-3dp"
            android:scrollbarSize="5dp"
            android:scrollbarStyle="outsideInset" />
    </RelativeLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.notepadr">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:requestLegacyExternalStorage="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.NotePadR">
        <activity android:name=".NoteEditorActivity"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

       enter code here         <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

   </manifest>