To see the OS-dependent characters used for formatting filenames (here, when running on Windows):
assert File.separator == '\\' && File.separatorChar == '\\' as char
assert File.pathSeparator == ';' && File.pathSeparatorChar == ';' as char
Instances of File are immutable representations of objects in the file system, that may or may not exist. To see different formats of a filename (here, when running within D:\Groovy\Scripts directory):
def f= new File('File.txt') assert f.name == 'File.txt'
assert ! f.isAbsolute()
assert f.path == 'File.txt'
assert f.parent == null
assert f.absolutePath == 'D:\\Groovy\\Scripts\\File.txt' assert f.absoluteFile.toString() == 'D:\\Groovy\\Scripts\\File.txt'
assert f.canonicalPath == 'D:\\Groovy\\Scripts\\File.txt'
assert f.canonicalFile.toString() == 'D:\\Groovy\\Scripts\\File.txt'
assert f.toURI().toString() == 'file:/D:/Groovy/Scripts/File.txt'
f= new File('D:/Groovy/Scripts/File.txt') assert f.name == 'File.txt'
assert f.isAbsolute()
assert f.path == 'D:\\Groovy\\Scripts\\File.txt'
assert f.parent == 'D:\\Groovy\\Scripts'
assert f.parentFile.toString() == 'D:\\Groovy\\Scripts'
assert f.absolutePath == 'D:\\Groovy\\Scripts\\File.txt'
assert f.canonicalPath == 'D:\\Groovy\\Scripts\\File.txt'
f= new File('../File.txt')
assert f.name == 'File.txt'
assert ! f.isAbsolute()
assert f.path == '..\\File.txt'
assert f.parent == '..'
assert f.absolutePath == 'D:\\Groovy\\Scripts\\..\\File.txt'
assert f.canonicalPath == 'D:\\Groovy\\File.txt'
f= new File('') assert f.name == ''
assert ! f.isAbsolute()
assert f.path == ''
assert f.parent == null
assert f.absolutePath == 'D:\\Groovy\\Scripts'
assert f.canonicalPath == 'D:\\Groovy\\Scripts'
assert new File('File.txt') == new File('File.txt')
assert new File('File.txt').compareTo(new File('File.txt')) == 0
assert new File('File.txt') != new File('../Scripts/File.txt')
None of the above example's files were created. Files are only created by some event:
def f1= new File('File1.txt')
f1 << 'abcdefg'
assert f1.length() == 7 && f1.size() == 7
assert f1.isFile() && ! f1.isDirectory() && ! f1.isHidden()
def f2= new File('D:/Groovy/Scripts', 'File2.txt')
f2= new File(new File('D:/Groovy/Scripts'), 'File2.txt')
assert ! f2.exists()
f2.createNewFile() assert f2.exists()
def d1= new File('Directory1')
d1.mkdir() def d2= new File('Directory2/SubDir1')
d2.mkdirs()
println f1.getFreeSpace()
println f1.getUsableSpace()
println f1.getTotalSpace()
assert f2.setWritable(true, false) && f2.canWrite()
assert f2.setWritable(true) && f2.canWrite()
assert f2.setWritable(false, false) && ! f2.canWrite()
assert f2.setWritable(false) && ! f2.canWrite()
f2.writable= true assert f2.canWrite()
assert f2.setReadOnly() && ! f2.canWrite()
assert f2.setExecutable(true, false) && f2.canExecute()
assert f2.setExecutable(true) && f2.canExecute()
f2.executable= true assert f2.canExecute()
assert ! f2.setExecutable(false)
assert f2.setReadable(true, false) && f2.canRead()
assert f2.setReadable(true) && f2.canRead()
f2.readable= true assert f2.canRead()
assert ! f2.setReadable(false)
assert new File('D:/Groovy/Scripts').list().toList() ==
['Script.bat', 'File1.txt', 'File2.txt', 'Directory1', 'Directory2']
assert new File('Directory2').list().toList() == ['SubDir1']
assert new File('').list() == null
assert new File('D:/Groovy/Scripts').list(
[accept:{d, f-> f ==~ /.*?1.*/ }] as FilenameFilter
).toList() == ['File1.txt', 'Directory1']
assert new File('D:/Groovy/Scripts').list(
{d, f-> f ==~ /.*?1.*/ } as FilenameFilter
).toList() == ['File1.txt', 'Directory1']
assert new File('D:/Groovy/Scripts').listFiles().toList()*.name ==
['Script.bat', 'File1.txt', 'File2.txt', 'Directory1', 'Directory2']
assert new File('Directory2').listFiles().toList()*.toString() ==
['Directory2\\SubDir1']
assert new File('D:/Groovy/Scripts').listFiles(
{dir, file-> file ==~ /.*?\.txt/ } as FilenameFilter
).toList()*.name == [ 'File1.txt', 'File2.txt' ]
assert new File('D:/Groovy/Scripts').listFiles(
[accept:{file-> file ==~ /.*?\.txt/ }] as FileFilter
).toList()*.name == [ 'File1.txt', 'File2.txt' ]
f2.renameTo( new File('RenamedFile2.txt') )
assert f2.name == 'File2.txt' assert new File('RenamedFile2.txt').exists()
[new File('RenamedFile2.txt'), new File('Directory1'), new File('Directory2')].
each{ it.delete() } assert ! new File('RenamedFile2.txt').exists()
assert ! new File('Directory1').exists()
assert new File('Directory2').exists()
assert new File('Directory2/SubDir1').delete() assert new File('Directory2').delete()
assert ! new File('Directory2').exists()
new File('File1.txt').deleteOnExit()
assert new File('File1.txt').exists()
def mod= new File('File1.txt').lastModified()
assert new File('File1.txt').setLastModified(mod - 60000)
new File('File1.txt').lastModified= mod - 120000
assert new File('File1.txt').lastModified() == mod - 120000
To perform general file manipulation in a file system, we can retrieve all the topmost directories:
println File.listRoots().toList()*.toString()
To create a temporary file, with given prefix (of at least 3 chars) and suffix:
File.createTempFile('Tem', '.txt')
File.createTempFile('Tem', '.txt', new File('D:\\Groovy\\Scripts'))
We can read and write to files in various ways, as in this example:
def f1= new File('File1.txt') << 'abcdefg:hijklmnop:qrstuv:wxyz\n'
f1.leftShift('123:456:7890\n') new File('File2.txt').createNewFile()
[new File('Directory1'), new File('Directory2/SubDir1')].each{ it.mkdirs() }
def list= []
new File('D:\\Groovy\\Scripts').eachFile{ list<< it.name }
assert list ==
['Script.bat', 'File1.txt', 'File2.txt', 'Directory1', 'Directory2']
list= []
new File('D:\\Groovy\\Scripts').eachFileMatch(~/File.*?\.txt/){ list<< it.name }
assert list == ['File1.txt', 'File2.txt']
list= []
new File('D:\\Groovy\\Scripts').eachFileRecurse{ list<< it.name }
assert list == ['Script.bat', 'File1.txt', 'File2.txt',
'Directory1', 'Directory2', 'SubDir1']
list= []
new File('D:\\Groovy\\Scripts').eachDir{ list<< it.name }
assert list == ['Directory1', 'Directory2']
list= []
f1.eachLine{ list<< it }
assert list == [ 'abcdefg:hijklmnop:qrstuv:wxyz', '123:456:7890' ]
list= f1.readLines()
assert list == [ 'abcdefg:hijklmnop:qrstuv:wxyz', '123:456:7890' ]
list= []
f1.splitEachLine(':'){ list<< it } assert list == [
['abcdefg', 'hijklmnop', 'qrstuv', 'wxyz'],
['123', '456', '7890'],
]
def f2= new File('File2.txt')
f2.write('abcdefg\n') assert f2.getText() == 'abcdefg\n'
f2.append('hijklmnop,')
f2.append(42) assert f2.getText() == '''abcdefg
hijklmnop,42'''
f2.write('一二三四五', 'unicode') assert f2.getText('unicode') == '一二三四五'
f2.append('六七八九十', 'unicode') assert f2.getText('unicode') == '一二三四五' + (0xFEFF as char) + '六七八九十'
[ new File('File1.txt'),
new File('File2.txt'),
new File('Directory1'),
new File('Directory2/SubDir1'),
new File('Directory2'),
].each{ it.delete() }
|
|