Java 1.7 значительно облегчает нашу жизнь благодаря запросу try-with-resources .
try (Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement()) {
try (ResultSet resultSet = statement.executeQuery("some query")) {
// Do stuff with the result set.
}
try (ResultSet resultSet = statement.executeQuery("some query")) {
// Do more stuff with the second result set.
}
}
Этот синтаксис довольно короткий и изящный. И connection
действительно будет закрыт, даже когда невозможно создать statement
.
Можно расшириться..\frag до его полного пути с путем твердости:
PS > resolve-path ..\frag
Попытка нормализовать путь с помощью объединения () метод:
[io.path]::Combine("fred\frog",(resolve-path ..\frag).path)
Вы могли также использовать Путь. GetFullPath, хотя (как с ответом R Dan) это даст Вам весь путь. Использование было бы следующие:
[IO.Path]::GetFullPath( "fred\frog\..\frag" )
или более интересно
[IO.Path]::GetFullPath( (join-path "fred\frog" "..\frag") )
, оба из которых приводят к следующему (принимающий Ваш текущий каталог D:\):
D:\fred\frag
Примечание, которое этот метод не пытается определить или fred или frag на самом деле, существует.
Эта библиотека хороша: NDepend. Помощники. FileDirectoryPath.
РЕДАКТИРОВАНИЕ: Это - то, что я придумал:
[Reflection.Assembly]::LoadFrom("path\to\NDepend.Helpers.FileDirectoryPath.dll") | out-null
Function NormalizePath ($path)
{
if (-not $path.StartsWith('.\')) # FilePathRelative requires relative paths to begin with '.'
{
$path = ".\$path"
}
if ($path -eq '.\.') # FilePathRelative can't deal with this case
{
$result = '.'
}
else
{
$relPath = New-Object NDepend.Helpers.FileDirectoryPath.FilePathRelative($path)
$result = $relPath.Path
}
if ($result.StartsWith('.\')) # remove '.\'.
{
$result = $result.SubString(2)
}
$result
}
Вызов это как это:
> NormalizePath "fred\frog\..\frag"
fred\frag
Примечание, что этот отрывок требует пути к DLL. Существует прием, который можно использовать для нахождения папки, содержащей в настоящее время выполняющийся сценарий, но в моем случае у меня была переменная среды, которую я мог использовать, таким образом, я просто использовал это.
Это дает полный путь:
(gci 'fred\frog\..\frag').FullName
Это дает путь относительно текущего каталога:
(gci 'fred\frog\..\frag').FullName.Replace((gl).Path + '\', '')
По некоторым причинам они только работают, если frag
файл, не directory
.
Ну, один путь был бы:
Join-Path 'fred\frog' '..\frag'.Replace('..', '')
Ожидают, возможно, я неправильно понимаю вопрос. В Вашем примере действительно ли frag является подпапкой лягушки?
Если необходимо избавиться от.. часть, можно использовать Систему. Объект IO.DirectoryInfo. Используйте 'fred\frog..\frag' в конструкторе. Свойство FullName даст Вам нормализованное имя каталога.
единственный недостаток состоит в том, что это даст Вам весь путь (например, c:\test\fred\frag).