안드로이드 파일 생성 및 폴더 생성이 안됩니다.

조회수 2632회
File plan_File = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + create_file_title.getText().toString() + ".txt");

FileOutputStream fs;

try {
    fs = openFileOutput(create_file_title.getText().toString(), Context.MODE_PRIVATE);
    fs.write(create_file_content.getText().toString().getBytes());
    fs.close();
} catch (Exception e) {
    e.printStackTrace();
}

구글링해서 파일을 만드는 것만 생각하고 따라해봤는데, 권한을 mainfest에 주어도 파일이 만들어질 생각을 안 합니다.

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

제가 처음이라 무언가 빼먹었거나 잘못했을 가능성이 크지만 어떤게 잘못되었는지 모르겠습니다.

File plan_folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "/" + main_folder + folder_name.getText().toString());

if (!plan_folder.exists()) {
    plan_folder.mkdir();
}

위에서부터 파일 생성, 권한, 폴더 생성인데, 파일과 폴더 둘 다 만들어지지 않습니다.

버튼을 누르면 만들어지는 방식입니다.

아래는 전체 코드입니다.

MainActivity

public class MainActivity extends AppCompatActivity {

    Context context;

    ScrollView scroll; // 메인화면 스크롤 뷰

    Button btnAdd; // 메인화면 추가 버튼

    LinearLayout layout01;

    EditText folder_name; // 생성할 폴더 제목
    View dialogView; // 다이얼로그
    final String[] versionArray = new String[] {"일정 추가" ,"폴더 추가"}; // 추가 다이얼로그 항목
    AlertDialog.Builder dlgAdd; // 추가 다이얼로그

    File main_folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "planner");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("플래너");

        scroll = findViewById(R.id.scroll);
        btnAdd = findViewById(R.id.btnAdd);
        layout01 = findViewById(R.id.Mainlayout);

        dlgAdd = new AlertDialog.Builder(MainActivity.this);

        dlgAdd.setTitle("추가하기");
        dlgAdd.setIcon(R.mipmap.ic_launcher);
        dlgAdd.setItems(versionArray, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int which) {
                if (which == 0) {
                    Intent intent = new Intent(getApplicationContext(), create_file_Activity.class);
                    startActivity(intent);
                }
                else {
                    dialogView = (View) View.inflate(MainActivity.this, R.layout.add_folder_dialog, null);
                    AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
                    dlg.setTitle("폴더 생성");
                    dlg.setView(dialogView);
                    dlg.setPositiveButton("확인", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int which) {
                            folder_name = (EditText) dialogView.findViewById(R.id.folder_name);

                            File plan_folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "/" + main_folder + folder_name.getText().toString());

                            if (!plan_folder.exists()) {
                                plan_folder.mkdir();
                            }
                            if (!plan_folder.mkdirs()) {
                                Log.e("FILE", "Directory not created");
                            } else {
                                Toast.makeText(getApplicationContext(), "폴더 생성 SUCCESS", Toast.LENGTH_SHORT).show();
                            }
                            if (folder_name == null) {
                                Toast.makeText(getApplicationContext(), "폴더 명을 입력해주세요.", Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                    dlg.setNegativeButton("취소", null);
                    dlg.show();
                };
            }
        });
        dlgAdd.setPositiveButton("닫기", null);

        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                dlgAdd.show();
            }
        });
    }

    // 리스너들이 작동을 하지 않음.

    @Override // 옵션 메뉴
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        menu.add(0, 1, 0, "추가");
        menu.add(0, 2, 0, "삭제");
        menu.add(0, 3, 0, "설정");

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case 1:
                dlgAdd.show();
                return true;
            case 2:
                return true;
            case 3:
                return true;
        }

        return false;
    }
}

create_file_Activity

public class create_file_Activity extends AppCompatActivity {

    Context context;
    LinearLayout main_layout;

    EditText create_file_title, create_file_content;
    Button create_file_btn_date, create_file_btn_time, create_file_btn_cancle, create_file_btn_confirm;

    TextView time_tv, date_tv;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.create_file);
        setTitle("일정 추가");

        create_file_title = (EditText) findViewById(R.id.create_file_title);
        create_file_content = (EditText) findViewById(R.id.create_file_content);

        create_file_btn_date = (Button) findViewById(R.id.create_file_btn_date);
        create_file_btn_time = (Button) findViewById(R.id.create_file_btn_time);
        create_file_btn_cancle = (Button) findViewById(R.id.create_file_btn_cancle);
        create_file_btn_confirm = (Button) findViewById(R.id.create_file_btn_confirm);

        main_layout = (LinearLayout) findViewById(R.id.Mainlayout);

        time_tv = (TextView) findViewById(R.id.time_tv);
        date_tv = (TextView) findViewById(R.id.date_tv);

        context = this;

        create_file_btn_cancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(intent);
            }
        });

        create_file_btn_confirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                CheckBox cbx = new CheckBox(context); // 삭제나 여러 파일에 대해 추가적인 기능을 행할 때 사용
//                cbx.setVisibility(View.INVISIBLE);

                Button btn = new Button(context);
                btn.setText(create_file_title.getText().toString());
                btn.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);

                //main_layout.addView(cbx);
                main_layout.addView(btn);

                int i = 1;
                // btn.setId("@+id/plan_btn" + i); id 각각 등록해주기기

                File plan_File = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + create_file_title.getText().toString() + ".txt");

                FileOutputStream fs;

                try {
                    fs = openFileOutput(create_file_title.getText().toString(), Context.MODE_PRIVATE);
                    fs.write(create_file_content.getText().toString().getBytes());
                    fs.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        create_file_btn_time.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Calendar now = Calendar.getInstance();

                final TimePickerDialog tpDialog = new TimePickerDialog(create_file_Activity.this, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                        String state = "AM";
                        if (selectedHour > 12) {
                            selectedHour -= 12;
                            state = "PM";
                        }
                        time_tv.setText(state + " " + selectedHour + "시 " + selectedMinute + "분");
                    }
                }, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), false); // true의 경우 24시간 형식의 TimePicker 출현
                tpDialog.getCurrentFocus();
                tpDialog.show();
            }
        });

        create_file_btn_date.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DatePickerDialog dpDialog = new DatePickerDialog(create_file_Activity.this, new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
                        date_tv.setText(i+"년 "+(i1+1)+"월 "+i2+"일");
                    }
                }, 0, 0, 0);
                dpDialog.getDatePicker().setMinDate(System.currentTimeMillis());
                dpDialog.show();
            }
        });
    }
}
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)