안드로이드 파일 생성 및 폴더 생성이 안됩니다.
조회수 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 답변
-
안드로이드 6.0 이상부터는 권한체크를 해주어야합니다. https://developer.android.com/training/permissions/requesting?hl=ko
여기를 참고하세요.
댓글 입력