В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.
При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.
Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».
Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this
. Возьмем этот пример:
public class Some {
private int id;
public int getId(){
return this.id;
}
public setId( int newId ) {
this.id = newId;
}
}
И в другом месте вашего кода:
Some reference = new Some(); // Point to a new object of type Some()
Some otherReference = null; // Initiallly this points to NULL
reference.setId( 1 ); // Execute setId method, now private var id is 1
System.out.println( reference.getId() ); // Prints 1 to the console
otherReference = reference // Now they both point to the only object.
reference = null; // "reference" now point to null.
// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );
// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...
Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference
и otherReference
оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.
Через ~ 7 лет я обновлю его на лучший подход, предложенный Божо.
new File("/path/directory").mkdirs();
Устаревший:
File theDir = new File("new folder");
// if the directory does not exist, create it
if (!theDir.exists()) {
System.out.println("creating directory: " + theDir.getName());
boolean result = false;
try{
theDir.mkdir();
result = true;
}
catch(SecurityException se){
//handle it
}
if(result) {
System.out.println("DIR created");
}
}
Вы также можете ссылаться на функцию makdir () для создания нового каталога в папке, где вы хотите.
makdir
. Если вы имели в виду mkdir
, как это добавляет что-либо к существующим ответам?
– Ted Hopp
21 October 2012 в 07:27
new File("C:\\Directory1").mkdir();
new File("C:\\Directory2\\Sub2\\Sub-Sub2").mkdirs()
Источник: этот совершенный учебник , вы также найдете пример использования.
Хотя на этот вопрос был дан ответ. Я хотел бы добавить что-то лишнее, т. Е. Если существует файл с именем каталога, которое вы пытаетесь создать, чем он должен вызывать ошибку. Для будущих посетителей.
public static void makeDir()
{
File directory = new File(" dirname ");
if (directory.exists() && directory.isFile())
{
System.out.println("The dir with name could not be" +
" created as it is a normal file");
}
else
{
try
{
if (!directory.exists())
{
directory.mkdir();
}
String username = System.getProperty("user.name");
String filename = " path/" + username + ".txt"; //extension if you need one
}
catch (IOException e)
{
System.out.println("prompt for error");
}
}
}
С помощью Java 7 вы можете использовать Files.createDirectories()
.
Например:
Files.createDirectories(Paths.get("/path/to/directory"));
Unlike the createDirectory method, an exception is not thrown if the directory could not be created because it already exists
– Keith OYS
12 November 2017 в 12:23
Эта функция позволяет вам создать каталог в домашнем каталоге пользователя.
private static void createDirectory(final String directoryName) {
final File homeDirectory = new File(System.getProperty("user.home"));
final File newDirectory = new File(homeDirectory, directoryName);
if(!newDirectory.exists()) {
boolean result = newDirectory.mkdir();
if(result) {
System.out.println("The directory is created !");
}
} else {
System.out.println("The directory already exist");
}
}
new File("/path/directory").mkdirs();
Здесь «каталог» - это имя каталога, который вы хотите создать / существующего.
Returns: true if and only if the directory was created, along with all necessary parent directories; false otherwise
– Xerus
11 June 2017 в 15:29
Если вы хотите создать один каталог, используйте mkdir
new File("/path/directory").mkdir();
Если вы хотите создать иерархию структуры папок, используйте mkdirs
new File("/path/directory").mkdirs();
public class Test1 {
public static void main(String[] args)
{
String path = System.getProperty("user.home");
File dir=new File(path+"/new folder");
if(dir.exists()){
System.out.println("A folder with name 'new folder' is already exist in the path "+path);
}else{
dir.mkdir();
}
}
}
Следующий метод должен делать то, что вы хотите, просто убедитесь, что вы проверяете возвращаемое значение mkdir () / mkdirs ()
private void createUserDir(final String dirName) throws IOException {
final File homeDir = new File(System.getProperty("user.home"));
final File dir = new File(homeDir, dirName);
if (!dir.exists() && !dir.mkdirs()) {
throw new IOException("Unable to create " + dir.getAbsolutePath();
}
}
попробуйте с этим.
import java.io.File;
public class MakingDirectory {
public static void main(String[] args) {
String s="d:\\msreddy\\sample1";
File file=new File(s);
file.mkdirs();
}
}
для получения дополнительной информации см. this.
Для java 7 и выше:
Path path = Paths.get("/your/path/string");
if(!Files.exists(path)) {
try {
Files.createDirectories(path);
} catch (IOException e) {
e.printStackTrace();
}
}
Просто хотел указать всем, кто звонил File.mkdir()
или File.mkdirs()
, чтобы быть осторожным, File
- это каталог, а не файл. Например, если вы вызываете mkdirs()
для пути /dir1/dir2/file.txt
, он создаст папку с именем file.txt
, которая, вероятно, не то, что вы хотели. Если вы создаете новый файл и хотите автоматически создавать родительские папки, вы можете сделать что-то вроде этого:
File file = new File(filePath);
if (file.getParentFile() != null) {
file.getParentFile().mkdirs();
}
Чистый и чистый:
import java.io.File;
public class RevCreateDirectory {
public void revCreateDirectory() {
//To create single directory/folder
File file = new File("D:\\Directory1");
if (!file.exists()) {
if (file.mkdir()) {
System.out.println("Directory is created!");
} else {
System.out.println("Failed to create directory!");
}
}
//To create multiple directories/folders
File files = new File("D:\\Directory2\\Sub2\\Sub-Sub2");
if (!files.exists()) {
if (files.mkdirs()) {
System.out.println("Multiple directories are created!");
} else {
System.out.println("Failed to create multiple directories!");
}
}
}
}
Хорошо, чтобы создать каталог / папку в java, у нас есть два метода
Здесь метод makedirectory создает единый каталог, если он не существует.
File dir = new File("path name");
boolean isCreated = dir.mkdir();
И
File dir = new File("path name");
boolean isCreated = dir.mkdirs();
Здесь метод makedirectories создаст все каталоги, отсутствующие в пути, который представляет файл.
Например, ссылку ниже (объясняется очень хорошо). Надеюсь, поможет!! http://www.flowerbrackets.com/create-directory-java-program/
Это для меня работает один или несколько каталогов: нужно импортировать java.io.File; / * введите код ниже, чтобы добавить diectory dir1 или проверить, существует ли dir1, если нет, поэтому создайте его так же, как и dir2 и dir3 * /
File filed = new File("C:\\dir1");
if(!filed.exists()){ if(filed.mkdir()){ System.out.println("directory is created"); }} else{ System.out.println("directory exist"); }
File filel = new File("C:\\dir1\\dir2");
if(!filel.exists()){ if(filel.mkdir()){ System.out.println("directory is created"); }} else{ System.out.println("directory exist"); }
File filet = new File("C:\\dir1\\dir2\\dir3");
if(!filet.exists()){ if(filet.mkdir()){ System.out.println("directory is created"); }} else{ System.out.println("directory exist"); }
Вы можете попробовать FileUtils # forceMkdir
FileUtils.forceMkdir("/path/directory");
, если вы хотите убедиться в его создании, то это:
final String path = "target/logs/";
final File logsDir = new File(path);
final boolean logsDirCreated = logsDir.mkdir();
if (!logsDirCreated) {
final boolean logsDirExists = logsDir.exists();
assertThat(logsDirExists).isTrue();
}
beacuse mkDir()
возвращает логическое значение, и findbugs будут плакать, если вы не используете эту переменную. Также его не очень приятно ...
mkDir()
возвращает true, если mkDir()
создает его. Если dir существует, он возвращает false, поэтому для проверки созданного вами каталога вызывается только exists()
, если mkDir()
возвращает false.
assertThat()
проверяет результат и терпит неудачу, если exists()
возвращает ложный. ofc вы можете использовать другие вещи для обработки несозданного каталога.
if(!theDir.exists())
иtheDir.mkdir()
статус мог быть изменен, а также он мог измениться между , а не , создавая каталог (из-заexists
, возвращающегоtrue
) и нуждающегося в нем. Результат методаexists
никогда не должен использоваться, чтобы решить, создать ли каталог или нет. Просто позвонитеmkdir
, никакое исключение не будет выбрано, если оно уже существует. – mwhs 24 November 2013 в 13:26mkdir
и необходимостью в этом каталоге? Я предполагаю, что вы имели в виду, что какой-то другой процесс удаляет каталог. – Episodex 17 July 2015 в 12:54mkdirs
, из исходного кода, первое, что вызывается, -if (exists()) { return false; }
. Сама реализация сначала проверяет, существует ли каталог, так что единственное, на что этот ответ виноват, возможно, проверяет это условие 2x. Не так плохо, как вы это делаете. – Michael Hogenson 12 November 2015 в 21:59Files
, как в более позднем ответе Benoit Blanchon. (Этот ответ, похоже, был написан до Java 7.) – Brick 8 September 2016 в 16:58